我正在关注如何在Java中解析xml的 mkyong 伟大的tutorial,但我有一种情况需要读取某些标签,但仅限于某个区域内。 e.g。
<?xml version="1.0"?>
<company>
<staff id="1001">
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff id="2001">
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
<changes>
<staff id="2001">
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<old_salary>175000</salary>
<new_salary>200000</salary>
</staff>
</changes>
</company>
在教程中,它使用NodeList nList = doc.getElementsByTagName("staff");
,但这会检索所有人员,包括<changes>
下的人员。如何忽略<staff>
下的所有<changes>
代码?
由于
答案 0 :(得分:1)
使用DOM解析器并不是最适合您的需求。 使用XPath queries应该会更好。 (API)
例如:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("test.xml"));
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/company/staff";
//read a nodelist using xpath
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
答案 1 :(得分:0)
当您应用要保存的项目时,如果它处于更改状态,您可以尝试捕获它,然后忽略它。前
if(company.changes != null)
{
//skip saving this node
}