[英]Java Stax how to get only value of specific child nodes
我使用 Stax 來獲取我的 xml 文件(大小 90 MB)的 nodeName 和 nodeValue:
<?xml version="1.0" encoding="UTF-8"?>
<name1>
<type>
<coord>67</coord>
<umc>57657</umc>
</type>
<lang>
<eng>989</eng>
<spa>123</spa>
</lang>
</name1>
<name2>
<type>
<coord>534</coord>
<umc>654654</umc>
</type>
<lang>
<eng>354</eng>
<spa>2424</spa>
</lang>
</name2>
<name3>
<type>
<coord>23432</coord>
<umc>14324</umc>
</type>
<lang>
<eng>141</eng>
<spa>142</spa>
</lang>
</name3>
我可以獲取 localName 但不能獲取子節點...如果我想獲取與'spa'
不同的所有子節點的值,我該如何處理才能獲取該值?
爪哇:
XMLStreamReader dataXML = factory.createXMLStreamReader(new FileReader(path));
while (dataXML.hasNext())
{
int type = dataXML.next();
switch(type)
{
case XMLStreamReader.START_ELEMENT:
System.out.println(dataXML.getLocalName());
break;
case XMLStreamReader.CHARACTERS:
System.out.println(dataXML.getText());
break;
}
}
您使用 StAX 解析。 這意味着您從解析器中提取事件。 StAX 解析沒有關於您的文檔的詳細結構的任何信息。 請檢查DOM、SAX 或 StAX和Java StAX 解析器之間的差異
如果您想獲得您的 XML 元素的子元素,您需要自己跟蹤它。
如果您真的希望以方便的方式訪問子項 - 使用 DOM 解析策略。 但正如您所提到的,您的文檔大約有 90MB,完全加載它可能真的很重。
為了跟蹤被解析的元素,需要引入保存當前標簽名稱的變量以及具有感興趣標簽名稱的變量:
String localname = null;
String tagName = "spa";
while (dataXML.hasNext()) {
int type = dataXML.next();
switch (type) {
case XMLStreamReader.SPACE:
continue;
case XMLStreamReader.START_ELEMENT:
localname = dataXML.getLocalName();
System.out.println(dataXML.getLocalName());
break;
case XMLStreamReader.CHARACTERS:
if (!tagName.equals(localname)) {
System.out.println(dataXML.getText());
}
break;
}
}
如果您要處理多個標簽,變量 tagName 可以替換為一個列表:
List<String> tagNames = new ArrayList<>();
tagNames.add("spa");
檢查如下:
if (!tagNames.contains(localname)) {
System.out.println(dataXML.getText());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.