2014-02-16 191 views
0

我正在学习使用DOM解析XML文件,但是我好像被困在如何进入列表中更深的节点。 这是我使用的代码:在解析DOM时遇到了问题

Node n = nlist.item(i); 
    // get ID 
    Element element = (Element)n; 
    String id = element.getAttribute("id"); 
    // create a student object 
    Student st = new Student(id); 
    // get child nodes 
    NodeList slist = n.getChildNodes(); 
    for (int j = 0; j < slist.getLength(); j++) { 
    Node selement = slist.item(j); 
    if (selement.getNodeType() == Node.ELEMENT_NODE) { 
     String textval = selement.getTextContent(); 
     if (selement.getNodeName().equals("FirstName")) 
      st.setFirstName(textval); 
     if (selement.getNodeName().equals("LastName")) 
      st.setLastName(textval); 
     if (selement.getNodeName().equals("Address")) 
     { 
      NodeList slist2 = n.getChildNodes(); 
      for(int k = 0; k < slist2.getLength(); k++) { 
       Node selement2 = slist2.item(k); 
        if(selement2.getNodeName().equals("Street")) 

对于一个XML文件,格式化,如:

<Student_Data> 
<Student id="11111"> 
<FirstName>Joe</FirstName> 
<LastName>Edwards</LastName> 
<Address> 
    <Street>345 North</Street> 
    <City>Brea</City> 
    <State>CA</State> 
    <Zip>99999</Zip> 
    <Phone>(714) 444-4444</Phone> 
</Address> 
<Classes> 
    <Class crn="5555"> 
     <Name>CIS 100</Name> 
     <Units>3</Units> 
     <Grade>A</Grade> 
    </Class> 
    <Class crn="7777"> 
     <Name>CIS 111</Name> 
     <Units>4</Units> 
     <Grade>B</Grade>   
    </Class> 
</Classes> 
</Student> 

我的输出找到的第一个和最后一个名字,但没有其他信息。

回答

0

请注意,在第19行中,您有一个副本&粘贴错误:您再次提取您开始使用的元素节点n的子节点。它应该是selement.getChildNodes()而不是n.getChildNodes()

您也可以考虑使用element.tagName属性来测试声音的名称。请参阅下图了解DOM2内核的摘要。

enter image description here

+0

我得到那个的getChildren()是未定义元素 –

+0

对不起,我糊涂了DOM2核心与新DOM4核心,提供了这种'element.children'属性。目前,这些新的DOM4功能仅在JavaScript中可用。所以,在你的情况下,你必须使用你一直使用的方法(比如'node.getChildNodes()')。我会编辑我的答案。 –