我有像这样的xml文件
<Sample_Data>
<lastname Name="lastname" Value="FIRSTNAME" />
<firstname Name="firstname" Value="LASTNAME" />
<DM Name="DM" Value="93.2" />
<CP Name="CP" Value="7.7" />
</Sample_Data>
我需要用java读取这个文件,我使用这样的代码:
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse("File.xml");
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("Sample_Data");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
System.out.println("DM : " + eElement.getElementsByTagName("DM").item(0).getTextContent());
System.out.println("CP : " + eElement.getElementsByTagName("CP").item(0).getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
但我无法获得firstname,lastname,DM和CP的值我得到空值。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
您的所有元素都没有文本节点。所以getTextContent()
是空的。您应该阅读属性。
getElementsByTagName().item(0)
会返回Node
,因此您应首先将其投放到Element
。
((Element) eElement.getElementsByTagName("firstname").item(0)).getAttribute("Value")
在采购代码中,如果NodeList
eElement.getElementsByTagName("firstname")
包含某些项目,您还应该检查。
答案 1 :(得分:0)
我想说最好的办法就是获得一个合适的XML文件。这样您就不必解析多个属性。
你知道了:
<Sample_Data>
<lastname Name="lastname" Value="FIRSTNAME" />
<firstname Name="firstname" Value="LASTNAME" />
<DM Name="DM" Value="93.2" />
<CP Name="CP" Value="7.7" />
</Sample_Data>
相反,你应该有类似的东西:
<Sample_Data>
<lastname> FIRSTNAME </lastname>
<firstname> firstname </firstname>
<DM> 93.2 <DM/>
<CP> 7.7 </CP>
</Sample_Data>
不会更容易合作吗?