解析xml中的嵌套标记时出现问题

时间:2011-07-08 13:35:56

标签: android xml android-xml

我有一个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();             

                }
        }

它不起作用。请有人确定我在解析时的错误。任何帮助表示赞赏。

3 个答案:

答案 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