2014-09-24 51 views
1

我正在使用java来读取xml模板。这个模板来自一个word文件,保持这个模板以保持项目内部结构和数据结构非常重要(我还没有发现任何其他方式来保持结构和数据不用任何其他方式而不使用XML文件) 。使用Java访问深层XML结构

为了简化代码,我只会放一个简化的代码,排除所有不相关的信息,只显示标签,直到找到问题的级别。

public static int listFile() throws ParserConfigurationException, 
     SAXException, IOException { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    folder = getPath(); 
    File dir = new File(folder); 
    String[] list = dir.list(filter); 
    for (String file : list) { 
     Document doc = (Document) db.parse(file); 
     doc.getDocumentElement().normalize(); 
     NodeList nodes = doc.getElementsByTagName("a"); 
     for(int var1=0;var1<nodes.getLength();var1++){ 
      Element element1 = (Element) nodes.item(var1); 
      NodeList nodes1 = element1.getElementsByTagName("b"); 
      for(int var2=0; var2<nodes1.getLength();var2++){ 
       Element element2 = (Element) nodes.item(var2); 
       NodeList nodes2 = element2.getElementsByTagName("c"); 
       System.out.print(var1+":"+nodes1.getLength()+":"+nodes2.getLength()+", "); 
      } 
     } 
    } 
} 

使用此代码的结果如下::

<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b> 
     <c> 
      <d>More Tags </d> 
     </c> 
    </b> 
</a> 
<a> 
    <b> 
     <c> 
      <d>More Tags </d> 
     </c> 
    </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 
<a> 
    <b>More Tags </b> 
</a> 

要使用下面的Java代码阅读本IM

0:1:0, 1:1:0, 2:1:0, 3:1:0, 4:1:0, 5:1:0, 6:1:0, 7:1:0, 8:1:0, 9:1:0, 10:1:0, 

这意味着,所有11个(编号为0到10)已找到“a”标签。还发现了每个“a”标签对应的“b”标签(每个“a”标签中有1个“b”),但是当我尝试访问标签“c”时,找不到这些标签。这让我怀疑代码

Element element2 =(Element)nodes.item(var2);
NodeList nodes2 = element2.getElementsByTagName(“c”);

即使在上一步工作正常时也是错误的。你看到这个解决方案吗?

回答

1

这可能是由于你的代码一个错字:

Element element2 = (Element) nodes1.item(var2); // instead of nodes 

nodesa元素。

1

您的元素2正在从节点而不是节点1生成。改成这样:

Element element2 = (Element) nodes1.item(var2);