我有一个xml,我通过DOM解析器解析。 xml有点像这个序列
<root>
<item1> abc </item1>
<item2> def </item2>
<item3> ghi </item3>
<item4>
<subItem4>
<name> xyz </name>
<id> 1 </id>
</subItem4>
<subItem4>
<name> asd </name>
<id> 2 </id>
</subItem4>
</item4>
</root>
根据这个虚拟xml我到达subItem 4但不到它的childern。我正在尝试如下获得最里面的项目是:
NodeList slide = theElement.getElementsByTagName(“item4”)。item(0).getChildNodes();
for(int i = 0; i<slide.getLength(); i++)
{
NodeList subSlides = theElement.getElementsByTagName("subItem4").item(0).getChildNodes();
for (int j=0; j<subSlides.getLength(); j++)
{
String subSlide_title = subSlides.item(i).getFirstChild().getNodeValue();
}
}
它不起作用。请有人确定我在解析时的错误。任何帮助表示赞赏。
答案 0 :(得分:1)
您没有使用有效的XML - 标签名称中不能包含空格。
XML名称不能包含空格,有关有效值,请参阅here。
更新(评论发布的样本代表实际的XML):
您通过节点列表的索引器进行的访问不正确:
String subSlide_title = subSlides.item(i).getFirstChild().getNodeValue();
尝试这样做(使用j
代替i
,因为内部循环变量被调用):
String subSlide_title = subSlides.item(j).getFirstChild().getNodeValue();
答案 1 :(得分:1)
NodeList nodes = doc.getElementsByTagName("item");
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList nodesimg = element.getElementsByTagName("name");
for (int j = 0; j < nodesimg.getLength(); j++) {
Element line = (Element) nodesimg.item(j);
String value=getCharacterDataFromElement(line);
}
}
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "?";
}
我认为上面的代码可以帮助您解析xml文件。
答案 2 :(得分:1)
XML元素都搞砸了。 字面上有两行没有错误。
例如
<subItem 4>
在语法上是错误的,我没有看到你可以从中得到什么逻辑意义。
你的意思是
<subItem4>
如第四个子项目或
<subItem someAttribute="4">
我建议学习XML,这很简单...... http://www.w3schools.com/xml/default.asp