【问题标题】:Print XML tag names and values in Java在 Java 中打印 XML 标记名称和值
【发布时间】:2009-07-08 10:44:29
【问题描述】:

我有一个 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

请帮忙!

【问题讨论】:

  • 抱歉回来晚了..但我一直在寻找Java的解决方案..(见问题标题):)
  • 也许我也应该将问题标记为“java”.. :)
  • 是的,这些信息从一开始就很有价值。无论如何,您可以在 Java 中应用 XSLT,没问题。 如果你想尝试那条路。

标签: xml parsing tags


【解决方案1】:

简约的 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>

给予:

图书馆= 书架= 书= 名称=书 1 价格=$10 书= 名称=书 2 价格=$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>

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

【讨论】:

    【解决方案2】:

    如果你可以用 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
    

    【讨论】:

    • 感谢您的回答!让我看看我是否可以使用它来代替 Java 程序.. :)
    猜你喜欢
    • 2019-02-14
    • 2014-11-17
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2012-06-06
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多