我正在制作一个在xml文件上进行DOM解析的android应用程序。我有一个xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<family>
<grandparent>
<parent1>
<child1>Foo</child1>
<child2>Bar</child2>
</parent1>
<parent2>
<child1>Raz</child1>
<child2>Mataz</child2>
</parent2>
</grandparent>
</family>
如果我在其上运行dom解析器,就像这样:
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(input);
doc.getDocumentElement().normalize(); //added in since the edit
NodeList nodd = doc.getElementsByTagName("grandparent");
for (int x = 0; x < nodd.getLength(); x++){
Node node = nodd.item(x);
NodeList nodes = node.getChildNodes();
for(int y = 0; y < nodes.getLength(); y++){
Node n = nodes.item(y);
System.out.println(n.getNodeName());
}
}
}
我的应用程序打印出以下内容
07-20 18:24:28.395:INFO / System.out(491):#text
07-20 18:24:28.395:INFO / System.out(491):parent1
07-20 18:24:28.395:INFO / System.out(491):#text
07-20 18:24:28.395:INFO / System.out(491):parent2
07-20 18:24:28.395:INFO / System.out(491):#text
我的问题是,那些#text字段是什么,更重要的是,我该如何摆脱它们?
编辑:现在我知道它们是什么,我试图将其标准化。我已更新代码以反映更改,但结果相同。
答案 0 :(得分:5)
它是空格(换行符,空格,制表符):)
答案 1 :(得分:1)
这就是你得到的:
1)所有节点都是祖父母的节点列表
NodeList nodd = doc.getElementsByTagName("grandparent");
2)祖父x的所有子节点
NodeList nodes = node.getChildNodes();
是
的子节点< grandparent >
< parent1 >
...
< /parent1 >
< parent2 >
...
< /parent2 >
< /grandparent >
3)孩子y
nodes.item(y);
之间可能有文字,如果您有,那么这就是您拥有的#text:
< grandparent >
yourTextHere1
< parent1 >
...
< /parent1 >
yourTextHere2
< parent2 >
...
< /parent2 >
yourTextHere3
< /grandparent >
你会得到:
yourTextHere1 parent1 yourTextHere2 parent2 yourTextHere3
我希望它对你有所帮助! 于连
答案 2 :(得分:0)
解析文档时执行此操作
Document doc = builder.parse(input);
doc.getDocumentElement().normalize();
这会使xml文件缩小并删除所有不需要的#text子项。