开发者

Problem in parsing nested tags in xml

开发者 https://www.devze.com 2023-03-18 18:53 出处:网络
I have an xml that i am parsing through DOM parser. the xml is of somewhat this sequence <root>

I have an xml that i am parsing through DOM parser. the xml is of somewhat this sequence

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

According to this dummy xml i am reaching till subItem 4 but not to the childern of it. what i am trying is as follows to get innermost Items is:

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();             

                }
        }

its not working. please can someone identify where am i doing the mistake in parsing. Any help is appreciated.


You are not using valid XML - you can't have spaces in tag names.

XML Names cannot contain white space, see here for valid values.


Update (following comment that the posted sample is representative of the actual XML):

Your access via the indexer of the node list is incorrect:

String subSlide_title = subSlides.item(i).getFirstChild().getNodeValue();

Try this instead (using j instead of i, as the inner loop variable is called):

String subSlide_title = subSlides.item(j).getFirstChild().getNodeValue();


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 "?";
}

I think above code will help you in parsing xml file.


The XML elements are all messed up. There are literally 2 lines that don't have mistakes in them.

For instance

<subItem 4> 

is syntactically wrong and I don't see what logical sense you could make out of it.

Do you mean

<subItem4> 

as in the fourth sub item or

<subItem someAttribute="4">

I'd recommend learning XML, it's very simple... http://www.w3schools.com/xml/default.asp

0

精彩评论

暂无评论...
验证码 换一张
取 消