xml タグで文字列を検索し、一致タグの一部である行を削除します。

xml タグで文字列を検索し、一致タグの一部である行を削除します。

文字列を検索<oneFi institution="12345678">して削除する必要があります<value maxPAN="19" minPAN="4" prefix="528749"/>

実際:

      <oneFi institution="12345678">
        <bin _list="1">
          <value maxPAN="19" minPAN="4" prefix="528749"/>
          <value maxPAN="19" minPAN="4" prefix="544448"/>
          <value maxPAN="19" minPAN="4" prefix="557231"/>
        </bin>
      </oneFi>
      <oneFi institution="854784662">
        <bin _list="1">
          <value maxPAN="19" minPAN="4" prefix="528749"/>
          <value maxPAN="19" minPAN="4" prefix="544448"/>
        </bin>
      </oneFi>

期待される:

      <oneFi institution="12345678">
        <bin _list="1">
          <value maxPAN="19" minPAN="4" prefix="544448"/>
          <value maxPAN="19" minPAN="4" prefix="557231"/>
        </bin>
      </oneFi>
      <oneFi institution="854784662">
        <bin _list="1">
          <value maxPAN="19" minPAN="4" prefix="528749"/>
          <value maxPAN="19" minPAN="4" prefix="544448"/>
        </bin>
      </oneFi>

ベストアンサー1

たとえば、XML文書が有効であると仮定すると、

<?xml version="1.0"?>
<root>
  <oneFi institution="12345678">
    <bin _list="1">
      <value maxPAN="19" minPAN="4" prefix="528749"/>
      <value maxPAN="19" minPAN="4" prefix="544448"/>
      <value maxPAN="19" minPAN="4" prefix="557231"/>
    </bin>
  </oneFi>
  <oneFi institution="854784662">
    <bin _list="1">
      <value maxPAN="19" minPAN="4" prefix="528749"/>
      <value maxPAN="19" minPAN="4" prefix="544448"/>
    </bin>
  </oneFi>
</root>

(あなたの例にはルートノードはありません)

その後、XMLstarletを使用できます。

$ xmlstarlet ed -d '//oneFi[@institution="12345678"]//value[@prefix="528749"]' file.xml
<?xml version="1.0"?>
<root>
  <oneFi institution="12345678">
    <bin _list="1">
      <value maxPAN="19" minPAN="4" prefix="544448"/>
      <value maxPAN="19" minPAN="4" prefix="557231"/>
    </bin>
  </oneFi>
  <oneFi institution="854784662">
    <bin _list="1">
      <value maxPAN="19" minPAN="4" prefix="528749"/>
      <value maxPAN="19" minPAN="4" prefix="544448"/>
    </bin>
  </oneFi>
</root>

XPATH式は、ノードの属性と、選択したノードの下のどこかにあるノードの属性を使用して、//oneFi[@institution="12345678"]//value[@prefix="528749"]質問で述べたノードと一致します。institutiononeFiprefixvalueoneFi

ノード属性の値をより具体的に指定する必要がある場合は、次のようにvalue他の属性を一致させることもできます。

value[@prefix="528749" and @maxPAN="19" and @minPAN="4"]

その表現部分です。

ed -dXMLstarletコマンドの(または)ビットは、ed --deleteユーティリティが次のことを行う必要があることを意味します。編集するXML文書と削除式に一致するノードです。

おすすめ記事