XMLからタグを削除する方法

XMLからタグを削除する方法

次のXMLファイルがあります。

<?xml version="1.0" encoding="utf-8"?>
<deviceID>IO238470374109730497</devicdeID>
<KeyValuePairs>
    <KeyValuePair>
      <BASE-URL>2</BASE-URL>
      <Key>2</Key>
      <Value>2</Value>
    </KeyValuePair>
    <KeyValuePair>
     <BASE-URL>3</BASE-URL>
     <Key>3</Key>
     <Value>3</Value>
   </KeyValuePair>
</KeyValuePairs>

この部分だけを取り除きたいです。

<KeyValuePair>
    <BASE-URL>3</BASE-URL>
    <Key>3</Key>
    <Value>3</Value>
</KeyValuePair>

私が達成したいのは、内部のコンテンツを削除し、これらの<KeyValuePair>特定の、と<BASE-URL>。タプルは常にユニークで繰り返しはありませんが、1つ以上にすることができます。<Key><Value><KeyValuePair>

Bashを使ってこれを行うにはどうすればよいですか?

ベストアンサー1

あなたの例は有効なXMLファイルではありません。<root/>文書の周りに要素を追加し、閉じるタグの誤字を修正して</deviceID>少し変更しました。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <deviceID>IO238470374109730497</deviceID>
    <KeyValuePairs>
        <KeyValuePair>
            <BASE-URL>2</BASE-URL>
            <Key>2</Key>
            <Value>2</Value>
        </KeyValuePair>
        <KeyValuePair>
            <BASE-URL>3</BASE-URL>
            <Key>3</Key>
            <Value>3</Value>
        </KeyValuePair>
    </KeyValuePairs>
</root>

これで、XML編集ツールを使用してXMLを編集できるようになりました。このXPath式は、テキスト値を含むxmlstarletXML要素(およびその内容)が削除されることを示します<KeyValuePair/><BASE-URL/>3

xmlstarlet ed -d '//KeyValuePair[BASE-URL/text()="3"]' /tmp/500185.xml

出力は次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<root>
  <deviceID>IO238470374109730497</deviceID>
  <KeyValuePairs>
    <KeyValuePair>
      <BASE-URL>2</BASE-URL>
      <Key>2</Key>
      <Value>2</Value>
    </KeyValuePair>
  </KeyValuePairs>
</root>

おすすめ記事