我正在使用带有DOM包的JAVA在XML中抓取数据。我能够检索所需的信息,但在XML中存在任何& nbsp 标记时出现问题。
这是我的 feed.xml 文件:
<inventory>
<item UnitID="1234" Record="0">
<id>1234</id>
<dealerid>455</dealerid>
<stock_number>1600Xtreme</stock_number>
<details>This is some additional details   about the
product</details>
<make>Nvidia</make>
</item>
<item UnitID="7854" Record="1">
<id>7854</id>
<dealerid>587</dealerid>
<stock_number>12TMAX5500</stock_number>
<details>This is some additional details   about the
product</details>
<make>Realtek</make>
</item>
</inventory>
正如您在feed.xml中看到的,详细信息标记包含&amp; nbsp,每当我运行JAVA时,它都会显示错误。
但是,如果删除该行,一切正常。删除它不是一种选择,因为我不允许在现实生活中编辑xml。
这是我的JAVA代码:
File fXmlFile=new File("feed.xml");
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList=doc.getElementsByTagName("item");
for (int temp=0; temp < nList.getLength(); temp++)
{
Node nNode=nList.item(temp);
Element eElement2 = (Element)nNode;
String search="Nvidia";
if (eElement2.getElementsByTagName("make").item(0).
getTextContent().equals(search))
{
System.out.println("The condition on the IF is True");
}
}
这是我在运行时遇到的错误:
[致命错误] feed.xml:150:504:引用了实体“nbsp”,但未声明。 org.xml.sax.SAXParseException; systemId:file:/ C:/src/Test1/feedForTests.xml; lineNumber:150; columnNumber:504;实体“nbsp”已被引用,但未声明。 在com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) 在javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205) 在Test1.ReadXMLFile2.main(ReadXMLFile2.java:58)
只需从详细信息标记中删除&amp; nbsp,问题就会消失。
我已经用我的代码达到了这一点,但却陷入了困境,无法找到解决方案。感谢您的帮助。