2013-10-31 123 views
0

我有一个XML配置文件:获取标签和值从XML文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Config> 
    <useProxy>true</useProxy> 
    <proxyReqPass>true</proxyReqPass> 
    <proxyHost>proxy.net.br</proxyHost> 
    <proxyUser>admin</proxyUser> 
    <proxyPass>12345</proxyPass> 
</Config> 

我有数据列表()对象,每个数据()包含两个字符串,标签名称和的值标签。所以我想在这个列表中插入该XML文件的数据,像例如:

List<Data> data = new ArrayList<Data>(); 

     File fXmlFile = new File("Config.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     doc.getDocumentElement().normalize(); 

     NodeList elements = doc.getElementsByTagName("Config"); 

     for (int i = 0; i < elements.getLength(); i++) { 

      Node nNode = elements.item(i); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element eElement = (Element) nNode; 

       data.add(new Data(eElement.getTagName(), eElement.getTextContent())); 

      } 
     } 

如果我打印的清单:

for(int i = 0; i < list.size(); i++) 
       System.out.println("Node: " + list.get(i).getTagName() + " Value: " + list.get(i).getTextContent()); 

我想要得到的结果是:

> Node: useProxy Value: true 
Node: proxyReqPass Value: true 
Node: proxyHost Value: proxy.net.br 
Node: proxyUser Value: admin 
Node: proxyPass Value: 12345 

但结果是:

> Node: Config Value: 
    false 
    false 

我不知道我的错误在哪里,请别人帮我

回答

1

您正在迭代搜索<Config>标记的结果。您应该迭代搜索结果的子项。

NodeList configTags = doc.getElementsByTagName("Config"); 
// assuming there will only be one `Config` node 
NodeList elements = configTags.item(0).getChildNodes(); 

for (int i = 0; i < elements.getLength(); i++) { 
    // (everything else looks correct)... 
} 

当查询getElementsByTagName(),返回的NodeList其中,你的情况应该总是包含一个节点,该节点<Config>。要访问子节点(<useProxy>等),您需要从节点列表中获取第一个节点并查询它的子节点getChildNodes()

+0

刚刚发现问题,而是使用NodeList到configTags即时通讯使用节点,但无论如何,非常感谢 –