我在我的应用中使用dom解析器。所以。我有下一个情况:
XML:
<test>
<A>
<B>hello</B>
world
</A>
</test>
代码:
private TagA parseTagA(Node node) {
TagA tagA = new TagA();
if (node.hasChildNodes()) {
NodeList childList = node.getChildNodes();
for (int i = 0; i < childList.getLength(); i++) {
// gets child
Node child = childList.item(i);
// parse <B> tag
if (child != null && "B".equals(child.getNodeName())) {
tagA.setTagB(parseTagB(child));
}
}
}
String tagABody = node.getTextContent();
tagA.setBody(tagABody);
return tagA;
}
我使用node.getTextContent()方法获取标签A的值,但我也得到标签B的值。我的意思是“tagABody”的价值是“你好世界”,但应该只是“世界”。方法getNodeValue()返回null,我猜因为节点类型是ELEMENT_NODE。无论如何,我有疑问:我如何只获得标签A的价值,只有“世界”?感谢。
答案 0 :(得分:1)
我没有测试它,但我相信下面的代码应该可以工作:
private TagA parseTagA(Node node) {
TagA tagA = new TagA();
String tagABody = "";
if (node.hasChildNodes()) {
NodeList childList = node.getChildNodes();
for (int i = 0; i < childList.getLength(); i++) {
// gets child
Node child = childList.item(i);
if(child.getNodeType == Node.TEXT_NODE) {
tagABody = node.getNodeValue();
tagA.setBody(tagABody);
} else
// parse <B> tag
if (child != null && "B".equals(child.getNodeName())) {
tagA.setTagB(parseTagB(child));
}
}
}
return tagA;
}
答案 1 :(得分:0)
我建议处理A
元素的文本节点子节点。
您可以在正在执行的子节点循环中执行此操作。为您标识代码if
的{{1}}将有一个B
,您可以在其中累积非else
文字。