【问题标题】:Read an XML File From Specific Tags从特定标签读取 XML 文件
【发布时间】:2014-03-12 17:36:21
【问题描述】:

我是使用 Java 读取 XML 文件的新手!其实我想在 XML 的特定标签示例下阅读 Paragraphs 是:

  <ATTRIBUTE name="Documentation" type="STRING"> </ATTRIBUTE>

  <ATTRIBUTE name="__Variants__" type="LONGSTRING"> </ATTRIBUTE>

  <ATTRIBUTE name="GUID_NPI" type="STRING"> </ATTRIBUTE>

  <ATTRIBUTE name="Status" type="ENUMERATION">None</ATTRIBUTE>

  <ATTRIBUTE name="Order" type="INTEGER">0</ATTRIBUTE>

  <ATTRIBUTE name="Costs" type="DOUBLE">0</ATTRIBUTE>

  <ATTRIBUTE name="Description" type="STRING">CARE management manage manager managing recognised that their capacity to develop developer development developing an insurance       product was limited and they would need to bring in particular expertise. They first       identified an array of basic requirements for the process as a whole: • Understanding of       insurance principles and processes • Experience of microfinance and microfinance clients •       Training skills • Clear vision of the new product development process • Marketing savvy, and       Ability to work with and guide partners that have different backgrounds and motivations.      </ATTRIBUTE>

  <ATTRIBUTE name="Comment" type="STRING"> </ATTRIBUTE>

  <ATTRIBUTE name="External documentation" type="PROGRAMCALL">ITEM "" param:""      </ATTRIBUTE>

  <INTERREF name="Organizational unit"> </INTERREF>

  <ATTRIBUTE name="Info on results" type="STRING"> </ATTRIBUTE>

所以我有一个包含以下标签下的段落的 xml

我想读取这些标签内的数据。我一直在尝试这个:

 try {

File fXmlFile = new File("c:\\Data.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);


doc.getDocumentElement().normalize();

System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

NodeList nList = doc.getElementsByTagName("ATTRIBUTE");

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("DATA : "+temp+"  " + eElement.getAttribute("type"));
        System.out.println("PARAGRAPH : " + eElement.getElementsByTagName("ATTRIBUTE").item(0).getTextContent());

    }
}
} catch (Exception e) {
e.printStackTrace();
}

我得到的输出不是完整的:

Root element :ADOXML
----------------------------

 Current Element :ATTRIBUTE
 Staff id : STRING
 java.lang.NullPointerException
at javaapplication5.JavaApplication5.main(JavaApplication5.java:53)

我的完整输出应该是一个段落:

CARE 管理层认识到他们开发保险产品的开发人员开发的能力有限,他们需要引入特定的专业知识。他们首先确定了整个流程的一系列基本要求: • 了解保险原则和流程 • 小额信贷和小额信贷客户的经验 • 培训技能 • 新产品开发流程的清晰愿景 • 精通营销,以及与客户合作的能力并指导具有不同背景和动机的合作伙伴。

谁能帮助我,请以更具体的方式阅读,请提前致谢!

【问题讨论】:

    标签: java xml tags


    【解决方案1】:

    您正在循环通过 ATTRIBUTE 元素 nList 的节点集。所以你得到nNode中的元素之一,打印它的名字,测试它是否是Element(它是),将它转换为eElement并成功获取它的属性type

    但随后您尝试在eElement 的上下文中检索名为ATTRIBUTE 的元素节点集:

    eElement.getElementsByTagName("ATTRIBUTE")
    

    不存在(您的元素仅包含文本 - 实际上是一个空格字符),而不是 ATTRIBUTE 元素的节点集。

    那么你有一个空引用。如果你在一个空引用上调用任何方法,你会得到NullPointerException

    您在这里可能想要做的是获取eElement.getNodeValue(),它将为您提供标签的文本内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2019-12-28
      相关资源
      最近更新 更多