我的問題是:當父元素的「grandchild」有相同名稱的其他元素時,如何直接在特定父元素下獲取元素。通過名稱獲取XML只是直接的子元素
我正在使用Java DOM library來解析XML Elements,我遇到了麻煩。下面是XML的一些(一小部分),我使用的是:
<notifications>
<notification>
<groups>
<group name="zip-group.zip" zip="true">
<file location="C:\valid\directory\" />
<file location="C:\another\valid\file.doc" />
<file location="C:\valid\file\here.txt" />
</group>
</groups>
<file location="C:\valid\file.txt" />
<file location="C:\valid\file.xml" />
<file location="C:\valid\file.doc" />
</notification>
</notifications>
正如你可以看到,有兩個地方可以放置<file>
元素。無論是在小組還是在外面的小組。我真的希望它這樣構造,因爲它更加用戶友好。
現在,只要我致電notificationElement.getElementsByTagName("file");
,它會給我所有<file>
元素,包括那些在<group>
元素下的元素。我以不同的方式處理這些文件中的每一種,所以這種功能是不可取的。
我想過兩種解決方案:
- 獲取的文件元素的父元素與它相應的處理(取決於它是否是
<notification>
或<group>
- 重命名第二
<file>
元素,以避免混淆
這兩種解決方案都不如想象的那樣只是讓事物保持原樣,並且只獲得直接子的<file>
元素仁<notification>
元素。
我願意對「最好」的方式做到這一點IMPO意見和答案,但我在DOM解決方案很感興趣,因爲這是這個項目的其餘部分使用。謝謝。
爲什麼不使用XPath來獲取這兩個節點列表並將它們區別對待? '// groups/group/file'和'// notification/file'就足以擁有它們。或者你只需要一個XPath就可以獲得它們全部? – Alex
爲什麼不通過你自己循環直接的孩子來創建這個集合,比如命中:「NodeList nodes = element.getChildNodes(); for(int i = 0; i
Dmitry
@Alex org.w3c.dom不支持XPath;他想要使用不同的庫,比如org.jdom.xpath,儘管我完全同意這是更優雅的方法。 –