2012-03-14 16 views
0

我有一個看起來是這樣的一個XML文件中的順序不同的標記名稱的子節點...Java的獲取與它們出現在XML文檔

<RootElementTag> 
    <ChildElementTag1 attribute1="value1" /> 
    <ChildElementTag1 attribute1="value2" /> 
    <ChildElementTag1 attribute1="value4" /> 
</RootElementTag> 

我不得不檢索所有「ChildElementTag1 「節點並按它們在文件中出現的順序處理它們。我使用了org.w3c.dom.Document.getElementsByTagName("ChildElementTag1");,它以xml文件中出現的順序向我返回了一個NodeList。

現在xml改變了一點,並且包含一個帶有不同標籤名稱「ChildElementTag2」的新子節點。

<RootElementTag> 
    <ChildElementTag1 attribute1="value1" /> 
    <ChildElementTag1 attribute1="value2" /> 
    <ChildElementTag2 attribute2="value3" /> 
    <ChildElementTag1 attribute1="value4" /> 
    <ChildElementTag2 attribute2="value5" /> 
</RootElementTag> 

有沒有辦法讓上述XML片段中的所有5個子元素節點按其出現的順序排列。

注意: - 我看到org.w3c.dom.Document.getElementById()方法需要我爲每個子節點引入一個「id」屬性,並根據它們的「id」屬性值對它們進行排序。截至目前,我沒有采取這種方法,希望有一個更簡單的方法來做到這一點。

+0

請參閱http://stackoverflow.com/questions/9781568/update-data-in-java-class-as-per-change-in-attribute-in-the-xml-file/9783154#9783154 – 2012-03-20 09:54:24

回答

2

RootTagElement節點上調用getChildNodes()


此方法的Javadoc沒有提到的節點列表中,它在文檔中出現的順序返回。

我懷疑你會發現它們與它們在文檔中出現的順序相同。 OTOH,你也可以看看我鏈接到的下面列出的方法。具體getFirstChild() & getNextSibling()(你會打電話給第一個孩子,然後重複,直到null)。

+0

試過了按照你的說法工作。訂單保持不變。謝謝安德魯! – maverick 2012-03-15 22:43:18

+0

也許是這樣,但是你提出了一個好的觀點,即沒有合同或義務以與XML相同的順序返回。我認爲你最好找第一個孩子和兄弟姐妹,這(通過我閱讀的文檔和方法名稱)*將*保證原來的順序。 – 2012-03-15 23:03:02