0

BBEdit で編集している大きな XML ファイルがあります。

古い日記をデジタルで再現した XML ファイル内には、メモ タグで囲まれたテキストがあります。

<note>Example of a note.</note>

ただし、一部の注記タグには、ネストされた引用タグで囲まれた引用があります。

<note>Example of a note, but <quote>"here is a quotation within the note"</quote></note>

引用タグの実際のコンテンツを保持しながら、メモタグから引用のすべてのインスタンスを削除する必要があります。したがって、例は次のようになります。

<note>Example of a note, but "here is a quotation within the note"</note>

私は BBEdit で GREP を使用してこれらの一部を正常に削除しましたが、複数の行にまたがる、または 2 つの異なるタグ セットの間にテキストがある、より複雑なメモ タグに行き詰まり始めています。例えば:

<note>Example of a note, <quote>"with a quotation"</quote> and a <quote>"second quotation"</quote> along with some text outside of the quotation before the end of the note.</note>

一部の引用は 10 行を超えることがあります。私の正規表現で \r を使用しても役に立たないようです。

また、引用タグはメモ タグの外に存在する可能性があることも言及しておく必要があります。これにより、/?quote を一括で検索して削除する可能性が排除されます。メモ タグ内ではなく、ドキュメント内で引用タグを使用する必要があります。

助けてくれてありがとう。

4

2 に答える 2

2

これは、XSLT を使用すると非常に簡単です。

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="quote">
    <xsl:apply-templates select="node()|@*" />
  </xsl:template>
</xsl:stylesheet>

選択した XSLT プロセッサを使用して、このスタイルシートを XML ファイルに適用します。たとえば、コマンドラインで動作するツールがあります。

于 2010-09-10T14:14:24.613 に答える
0

XMLの形成方法に制限がなければ、これは正規言語の範囲を超えて文脈自由言語になります。つまり、正規表現は役に立ちません。XMLの構造が単純な場合(ノードにネストされたノードや引用符にネストされた引用符がない場合)、グローバル置換の行に沿って何かを実行できる可能性がありますが、<node>(!</node>)<quote>(!</quote>)</quote>(!</node>)</node>おそらく<node>\1\2\3</node>ジョブに間違ったツールを使用しています。他の回答のメモの1つとして、XSLTが役立つ場合があります。または、XML解析ライブラリを使用して、探しているタグを取り除くための簡単なプログラムを作成することもできます。

于 2010-09-10T14:25:06.480 に答える