2014-03-12 43 views
1

我是使用Java读取XML文件的新手!其实我想XML的特定标签样本下阅读段落是:从特定标记中读取XML文件

<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) 

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

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

有人可以帮助我,请以更具体的方式阅读,请提前致谢!

回答

0

您正在循环访问节点集ATTRIBUTE元素nList。所以你得到nNode中的其中一个元素,打印它的名字,测试它是否是Element(它是),将它投射到eElement并成功获得它的属性type

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

eElement.getElementsByTagName("ATTRIBUTE") 

不存在的(你的元素只包含文本 - 一个空白字符,其实),而不是节点集ATTRIBUTE元素。

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

你可能想要在这里做的是得到eElement.getNodeValue()这将给你的标签的文本内容。