在Java中打印XML标记名称和值

时间:2009-07-08 10:44:30

标签: xml parsing tags

我有一个XML文档,我想打印文档中所有标记的标记名称和值(叶子节点)。

例如,对于XML:

<library>
  <bookrack>
    <book>
      <name>Book1</name>
      <price>$10</price>
    </book>
    <book>
      <name>Book2</name>
      <price>$15</price>
    </book>
  </bookrack>
</library>

输出应该是这样的:

library=
bookrack=
book=
name=Book1
price=$10
book=
name=Book2
price=$15

请帮忙!

2 个答案:

答案 0 :(得分:1)

Minimalistic XSLT 1.0方法:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>

  <xsl:output method="text" />

  <xsl:template match="*">
    <xsl:value-of select="name()" />
    <xsl:text>=</xsl:text>
    <xsl:value-of select="normalize-space(text())" />
    <xsl:text>&#10;</xsl:text>
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="text()" />

</xsl:stylesheet>

给出:

library=
bookrack=
book=
name=Book1
price=$10
book=
name=Book2
price=$15

此替代模板将更好地处理节点值:

<xsl:template match="*">
  <xsl:value-of select="name()" />
  <xsl:text>=</xsl:text>
  <xsl:if test="normalize-space(text()) != ''">
    <xsl:value-of select="text()" />
  </xsl:if>
  <xsl:text>&#10;</xsl:text>
  <xsl:apply-templates />
</xsl:template>

输出与之前相同,但节点值中的间距将保留。

答案 1 :(得分:0)

如果你可以用xslt解析xml那么它很简单(输出可以改成只用html的文本,以便能够轻松查看结果)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" encoding="utf-8" />
   <xsl:template match="/">
      <xsl:for-each select="./*">
         <xsl:call-template name="list" />
      </xsl:for-each>
   </xsl:template>
   <xsl:template match="*" name="list">
      <xsl:value-of select="local-name(.)" /> = <xsl:value-of select="text()" /><br />
      <xsl:for-each select="./*">
         <xsl:call-template name="list" />
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

返回:

library = 
bookrack = 
book = 
name = Book1
price = $10
book = 
name = Book2
price = $15