2009-07-08 9 views
0

私はXML文書を持っており、文書内のすべてのタグのタグ名と値(リーフノードの値)を出力したい。例えばJavaでXMLタグの名前と値を出力する

は、XMLのために:

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

ヘルプしてください:

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

出力のようなものでなければなりません!

+0

xsltを使用していますか? – Josh

+0

遅くなって申し訳ありませんが、Javaで解決策を探していました。(質問タイトルを参照):) –

+0

質問に「java」とタグを付ける必要があります。:) –

答えて

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 
+0

あなたの答えをありがとう! Javaプログラムの代わりにこれを使用できるかどうかを見てみましょう。:) –

関連する問題