長い話を短く

長い話を短く

xmlこのタグを複数回含むファイルがあります。</w:rPr>

これが使用される方法です

  <w:rPr>
      TO REMOVE
  </w:rPr>

ただし、タグ自体の内容が異なる場合があります。 sedなどを使用して、および間<w:rPr>のすべての項目を削除して</w:rPr>から2つのタグを削除する方法はありますか?

関連ネームスペース

xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"

およびファイル自体(フォーマットされた有効なXML)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:lvl w:ilvl="0">
      <w:rPr>
          TO REMOVE
      </w:rPr>
      <w:rPx>
        <w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
      </w:rPx>
    </w:lvl>
</root>

ベストアンサー1

長い話を短く

お願いします、絶対に使用しないでください今回のミッションのために!

またはをsed使用するたびに子猫を殺します。htmlxml

これは課題です

(適切なXMLパーサー)と彼の友人、このように:

xmlstarlet ed \
           -L \
           -N w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" \
           -d '//w:rPr' file.xml

いくつかの説明:

  • -Lファイルの編集飛行中良いsed -i
  • -N設定XML名前空間、必要なら
  • -dxpath式に一致するノードの削除

確認するxmlstarlet edit --help

使用basex

純粋なXQueryソリューション:

$ cat XQuery
declare namespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";    
copy $input := doc("/dev/stdin")
modify delete node $input//w:rPr
return $input

$ basex XQuery < file.xml

使用XQueryxidel:

そして制限付きXQuery機能

xidel --xml --xquery '
    declare namespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
    x:replace-nodes(//w:rPr, ())
' file.xml 

理論:

コンパイル理論によると、XML/HTML は、以下に基づく正規表現を使用して解析できません。有限状態マシン。 XML/HTML の階層構造のため、以下を使用する必要があります。プッシュダウンオートマトン操作して左利き受容体ツールに似た構文の使用アクリル

realLife©®™ ルーチンツール:

次のいずれかを使用できます。

  • xmllintlibxml2xpath1 は通常デフォルトでインストールされます。
  • xmlstarlet編集、選択、変換可能...デフォルトではインストールされていません、XPath1
  • PerlモジュールXML::XPath、XPath1経由でインストール
  • ベーシックXbasexパッケージ、完全なXQuery 3.1はデフォルトではインストールされません。
  • ヒデルXPath3、一部のXQuery 3(アップデートなし)
  • サクソンリント私のプロジェクト、@Michael KayのSaxon-HE JavaライブラリXPath3のラッパー

あるいは、高級言語と適切なライブラリを使用することもできます。

~のlxml( from lxml import etree)

~のXML::LibXMLXML::XPathXML::Twig::XPathHTML::TreeBuilder::XPath

この例を確認してください

DOMXpathこの例を確認してください


確認する:HTMLタグで正規表現を使用する

ここに画像の説明を入力してください。

おすすめ記事