在Java中读取一个标记中包含多个值的xml文件
我有这样的xml文件在Java中读取一个标记中包含多个值的xml文件,java,xml,Java,Xml,我有这样的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 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();
}
试试看{
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(“File.xml”);
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“样本数据”);
System.out.println(“-------------------------------”;
对于(int-temp=0;temp
但是我不能得到firstname、lastname、DM和CP的值,我得到的是空值
有人能帮我解决这个问题吗?您的所有元素都没有文本节点。因此
getTextContent()
为空。您应该改为读取属性
getElementsByTagName()。项(0)
返回一个节点
,因此应首先将其强制转换为元素
((Element) eElement.getElementsByTagName("firstname").item(0)).getAttribute("Value")
在生产代码中,您还应该检查
节点列表eElement.getElementsByTagName(“firstname”)
是否包含某些项。您的所有元素都没有文本节点。因此getTextContent()
为空。您应该改为读取属性
getElementsByTagName()。项(0)
返回一个节点
,因此应首先将其强制转换为元素
((Element) eElement.getElementsByTagName("firstname").item(0)).getAttribute("Value")
在生产代码中,您还应该检查节点列表eElement.getElementsByTagName(“firstname”)
是否包含一些项。我认为最好的方法是获取一个正确的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>
名字
名字
93.2
7.7
这不是更容易处理吗?我认为最好的办法是获得一个合适的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>
名字
名字
93.2
7.7
这不是更容易处理吗?是的,这会更容易,但我得到的xml文件与我的示例中的类似。谢谢你的评论。是的,这会更容易,但我得到的xml文件就像我的示例中一样。谢谢你的评论。