如何使用xlstproc解析没有id的XML?

时间:2014-09-07 21:10:38

标签: xml xslt

如果xml的格式为

<person>
  <first>Thomas</first>
  <last>Andrews</last>
  <title>Developer</title>
</person>

我们可以将xslt作为:

   <xsl:template match="person">
       <xsl:value-of select='first'/><xsl:text>|</xsl:text>
       <xsl:value-of select='last'/><xsl:text>|</xsl:text>
       <xsl:value-of select='title'/><xsl:text>|</xsl:text>
  </xsl:template>   

使用xsltproc应用上述样式,我得到的输出将是:Thomas|Andrews|Developer。 如何在没有特定属性名称时解析xml?例如下面的那个:

  <Row>
   <Data ss:Type="String">John</Data>
   <Data ss:Type="Number">1</Data>
   <Data ss:Type="String">4</Data>
   <Data ss:Type="String">Smith</Data>
   <Data ss:Type="String">US Dollar</Data>
   <Data ss:Type="String">North America</Data>
 </Row>

1 个答案:

答案 0 :(得分:1)

您使用XML解析器解析XML。如果元素被称为“人”并且#34;那么这并不重要。或&#34;数据&#34;所以&#34;解析XML&#34;这不是你的问题。

xsltproc是您的XSLT处理器。 XSLT处理器的输入是解析的XML文档。如果元素名称没有描述内容(例如&#34;数据&#34;),那会是什么?与数据库表的列不同,XML元素确实有一个顺序,因此您可以使用输入的顺序,假设它在所有输入文档中保持不变。除此之外,我无法想出一种识别字符串的好方法,例如&#34; John&#34;作为一个人的名字。

如果您不必担心XML元素的名称,可能会有这个诀窍:

<xsl:template match="Row">
  <xsl:for-each select="*">
    <xsl:value-of select='.'/><xsl:text>|</xsl:text>