シェルスクリプトでxmlファイルを解析する方法

シェルスクリプトでxmlファイルを解析する方法

次の形式のデータを分割する方法を知りたいです。

<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スクリプトに渡すのですか?

答え1

データを前処理します。XMLスター:

$ xml sel -t -c '/datas/data' -nl data.xml
<data>
  <name>Name1</name>
 </data><data>
  <name>Name2</name>
 </data>

さて、Pythonスクリプトがこのデータをどのように読み取るかによって異なります。ファイルや標準入力から出てください。

答え2

私は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>&#xa;</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>

関連情報