java使用xpath解析xml并获取嵌套的child
所以,我有一个XML结构,看起来像这样
<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<actors>
<actorUID>1w2e3r</actorUID>
<actor id="1">
<name>Christian Bale</name>
<age>40</age>
</actor>
<actor id="2">
<name>LiamNeeson</name>
<age>45</age>
</actor>
<actor id="3">
<name>Michael</name>
<age>60</age>
</actor>
</actors>
<foo:singers>
<foo:singer id="4">
<name>Michael</name>
<age>60</age>
</foo:singer>
<foo:singer id="5">
<name>Michael</name>
<age>60</age>
</foo:singer>
<foo:singer id="6">
<name>Michael</name>
<age>60</age>
</foo:singer>
</foo:singers>
</root>
我需要解析这个json并保存actorUID、actor的元素。名字,演员。年龄,福:歌手。名字,福:歌手。年龄到数据库
我试过这个:
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(stops));
Document doc = db.parse(is);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("/root/actors");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nl.getLength(); i++) {
Element element = (Element) nl.item(i);
System.out.println(element.getElementsByTagName("actorsUID")
.item(0)
.getTextContent());
System.out.println(element.getElementsByTagName("actor")
.item(0)
.getTextContent());
}
} catch (Exception e) {
e.printStackTrace();
}
在我得到这个-element.getElementsByTagName("actor")
之后,如何获得演员名
?
我不想只得到name元素,因为如果我要另一个孩子成为演员,如果有女演员。名字,然后它就会破裂
# 1 楼答案
实际上,我建议实现一个SAX解析器。但如果要使用xpath,需要注意两件事:
DocumentBuilderFactory必须知道名称空间
xpath必须使用名称空间上下文
您可以将它们设置为:
然后,为了获取
name
、age
或任何其他子节点,您可以使用下面的代码,基本上是获取actor
的子节点并打印节点名、文本