UNIXスクリプトまたはコマンドを使用してこれを行う必要があります/ home/user/app/xmlfilesに次のようなxmlファイルがあります
<book>
<fiction type='a'>
<author type=''></author>
</fiction>
<fiction type='b'>
<author type=''></author>
</fiction>
<Romance>
<author type=''></author>
</Romance>
</book>
フィクションの著者タイプをローカルとして編集したい。
<fiction>
<author type='Local'></author>
</fiction>
属性bのフィクションタグのみにある著者タイプを変更する必要があります。 UNIXシェルスクリプトまたはコマンドを使用してこれを手伝ってください。よろしくお願いします!
<author type=''><\/author>
を<author type='Local'><\/author>
に置き換えるだけの場合は、そのsed
コマンドを使用できます。
sed "/<fiction type='a'>/,/<\/fiction>/ s/<author type=''><\/author>/<author type='Local'><\/author>/g;" file
しかし、xmlを扱うときは、 xmlstarlet のようなxmlパーサー/エディターをお勧めします。
$ xmlstarlet ed -u /book/*/author[@type]/@type -v "Local" file
<?xml version="1.0"?>
<book>
<fiction>
<author type="Local"/>
</fiction>
<Romance>
<author type="Local"/>
</Romance>
</book>
変更を印刷する代わりに、-L
フラグを使用してファイルをインラインで編集します。
xmlstarlet edit --update "/book/fiction[@type='b']/author/@type" --value "Local" book.xml
Xsl-document doThis.xsl
を使用して、source.xml
をxsltproc
とともにnewFile.xml
に処理できます。
Xslは、これに対する答え question に基づいています。
これをdoThis.xsl
ファイルに入れます
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="no"/>
<!-- Copy the entire document -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Copy a specific element -->
<xsl:template match="/book/fiction[@type='b']/author">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<!-- Do something with selected element -->
<xsl:attribute name="type">Local</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
次に、newFile.xml
を作成します
$: xsltproc -o ./newFile.xml ./doThis.xsl ./source.xml
これはnewFile.xml
になります
<?xml version="1.0" encoding="UTF-8"?>
<book>
<fiction type="a">
<author type=""/>
</fiction>
<fiction type="b">
<author type="Local"/>
</fiction>
<Romance>
<author type=""/>
</Romance>
</book>
タイプbフィクションの検索に使用される式はXPath
です。
sed
を使用すると、非常に簡単です。次のスクリプトはファイルa.xml
の内容を変更し、元のファイルをバックアップとしてa.bak
に入れます。
これは、各ファイルで文字列<author type=''>
を検索し、<author type='Local'>
に置き換えます。 /g
修飾子は、可能であれば、各行で複数の置換を試みることを意味します(サンプルファイルでは必要ありません)。
sed -i.bak "s/<author type=''>/<author type='Local'>/g" a.xml