2014-02-25 87 views
0

我有一個包含兩種元素類型的XML文檔。一種僅具有屬性的元素類型,另一種僅包含第一種元素。XML元素類型全都相同

<TagList name="Results"> 
    <Tag name="type_of_identifier" value="idvalue"/> 
    <Tag name="some_other_identifier" value="otheridvalue"/> 
    .... 
    <Tag name="type" value="asdfaf"/> 
    <TagList name="SubList"> 
     <Tag name="param1" value="value1"/> 
     <Tag name="param2" value="value2"/> 
    </TagList> 
</TagList> 

我是新來的XML(也是Java),我只是不知道爲什麼這樣設置這種方式。

有沒有辦法通過指定名稱來獲取節點的值,而不必遍歷每個節點?

+3

Xpath呢? 看到這個問題http://stackoverflow.com/questions/2811001/how-to-read-xml-using-xpath-in-java –

+0

只要你做,不要嘗試和使用正則表達式,或沿着這些東西試圖縮小它的範圍,而不是循環一切。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags更多信息 – WillBD

+0

@JaroslavKubacek是的,XPath應該這樣做。我正在遵循http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/的例子,它使事情變得非常混亂。 – horriblyUnpythonic

回答

1

考慮在處理文件之前將文件轉換爲更衛生的文件。一個簡單的XSLT樣式表有兩個模板規則:

<xsl:template match="TagList"> 
    <xsl:element name="{@name}"> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="Tag"> 
    <xsl:element name="{@name}"> 
    <xsl:value-of select="@value"/> 
    </xsl:element> 
</xsl:template> 

將其轉換爲這樣的事情:

<Results> 
    <type_of_identifier>idvalue</type_of_identfier> 
    <some_other_identifier>otheridvalue<some_other_identifier/> 
    .... 
    <type>asdfaf</type> 
    <SubList> 
     <param1>value1</param1> 
     <param2>value2</param2> 
    </SubList> 
</Results> 

這樣做的好處是,該文件的所有後續處理變得更加容易。

+0

這看起來好像會起作用。我真正的XML文件稍微複雜一點,但你的例子應該足以讓我開始。 – horriblyUnpythonic

+0

看起來'apply-templates'部分工作不正常。它縮進,但不放標籤。 – horriblyUnpythonic

+0

是的,那樣做,謝謝!雖然我學會了這個小錯別字可能非常令人沮喪的難題。 – horriblyUnpythonic

相關問題