쉘 스크립트에서 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>

관련 정보