XMLタグを見つけて、タグ内のテキストを複数のパラメータ値に置き換えます。

XMLタグを見つけて、タグ内のテキストを複数のパラメータ値に置き換えます。

特定のxmlタグを見つけて、タグ内のテキストをパラメータ化された値に置き換えます。何度も発生した場合は交換が必要です。

サンプルファイルの内容:

<a>abc</a>

現在の試み:

sed -i "s/\(<a>\).*\(<\/a>\)/\(<a>\)$param\(<\/a>\)/g" script.xml

希望の結果:param = 111の場合

<a>111</a>

ベストアンサー1

私はあなたが解決策を望んでいることを知っていますが、通常、非常に単純なツールを除いて、XML文書を処理するときにsedXMLベースのツール(それらの多くがあります)を使用することをお勧めします。sed

これが私のXML文書(doc.xml)であるとしましょう。

<?xml version="1.0"?>
<xml>
    <c><a>abc</a></c>
    <b>
        <a>abc</a>
        <a>abc</a>
    </b>
    <a parm="FPM">abc</a>
</xml>

次のXMLスタイルシートを使用して、style.xsl文書を必要な形式に変換します。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name = "value" />

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

    <xsl:template match="a/text()[.='abc']">
        <xsl:value-of select = "$value" />
    </xsl:template>

</xsl:stylesheet>

xsltprocほとんどの主要なLinuxディストリビューションにデフォルトでインストールされているツールを使用して変換を実行します。

$ xsltproc --stringparam value "111" style.xsl doc.xml
<?xml version="1.0"?>
<xml>
    <c><a>111</a></c>
    <b>
        <a>111</a>
        <a>111</a>
    </b>
    <a parm="FPM">111</a>
</xml>
$

おすすめ記事