次の形式からデータを分割する方法を教えてください。
<datas>
<data>
<name>Name1</name>
</data>
<data>
<name>Name2</name>
</data>
</datas>
次の形式に:
<data><name>Name1</name></data>
<data><name>Name2</name></data>
解析されたデータは、次のようにPythonスクリプトに送信されます。
python script.py <data><name>Name1<name></data>
python script.py <data><name>Name2<name></data>
私は次のようなコマンドを試しました:
echo 'cat /datas/data' | xmllint --Shell file.xml
しかし、出力を目的の形式でPythonスクリプトに渡すにはどうすればよいですか?
XMLStarlet でデータを前処理します。
$ xml sel -t -c '/datas/data' -nl data.xml
<data>
<name>Name1</name>
</data><data>
<name>Name2</name>
</data>
次に、それはあなたがどのようにPythonスクリプトがこのデータを読みたいかによって異なります。うまくいけば、それはファイルまたは標準入力からのものです...
Xsltを使用します。
xsltスタイルシートは次のようになります
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/datas">
<xsl:apply-templates select="data"/>
</xsl:template>
<xsl:template match="data">
<data><name><xsl:value-of select="./name"/></name></data><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
変換には、xsltprocプログラムを使用します。
入力ファイルの名前がin.xmlだとしましょう
xsltスタイルシートの名前はin.xsl
その後、呼び出しは
xsltproc in.xsl in.xml
出力:
<?xml version="1.0"?>
<data><name>Name1</name></data>
<data><name>Name2</name></data>