2009-07-08 31 views
0

我有一個XML文檔,我想打印文檔中所有標記的標記名稱和值(葉節點)。在Java中打印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 

請幫助!

+0

您使用的是xslt嗎? – Josh 2009-07-08 10:59:19

+0

對不起回來遲..但我正在尋找一個Java解決方案..(請參閱問題標題):) – 2009-07-08 12:05:38

回答

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> 

給出:

 
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> 

的輸出是與之前相同,但節點值之內間隔將被保留。

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