在Java中的一个标记中读取带有多个值的xml文件

时间:2017-08-02 14:36:16

标签: 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>

我需要用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的值我得到空值。

有人可以帮我解决这个问题吗?

2 个答案:

答案 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>

不会更容易合作吗?