Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中读取一个标记中包含多个值的xml文件_Java_Xml - Fatal编程技术网

在Java中读取一个标记中包含多个值的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>

我有这样的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();
    }
试试看{
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文件就像我的示例中一样。谢谢你的评论。