gpt4 book ai didi

java - 使用 DOM 包 JAVA 进行 XML 抓取 "  entity error"

转载 作者:行者123 更新时间:2023-12-02 02:50:27 25 4
gpt4 key购买 nike

我正在使用带有 DOM 包的 JAVA 来抓取 XML 中的数据。我能够检索所需的信息,但是当 XML 中存在任何   标记时,我遇到了问题。

这是我的 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 &nbsp 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 &nbsp about the
product</details>

<make>Realtek</make>
</item>
</inventory>

正如您在 feed.xml 中看到的,详细信息标签包含一个   ,每当我运行 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");
}
}

这是我运行时遇到的错误:

[Fatal Error] feed.xml:150:504: The entity "nbsp" was referenced, but not declared. org.xml.sax.SAXParseException; systemId: file:/C:/src/Test1/feedForTests.xml; lineNumber: 150; columnNumber: 504; The entity "nbsp" was referenced, but not declared. at 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) at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205) at Test1.ReadXMLFile2.main(ReadXMLFile2.java:58)

只需从详细信息标记中删除  ,问题就消失了。

我的代码已经到了这一点,但是卡住了并且找不到解决方案。感谢您的帮助。

最佳答案

您的“XML”不是 XML,因为它包含未解析的实体引用。 (事实上​​,它甚至不是一个格式良好的实体引用,因为它缺少终止分号。)

所以您处于许多 SO 用户的位置:您收到了错误的数据。我的建议是,将其寄回原处并要求退款。不接受伪劣商品。 XML 的全部意义在于通过使用广泛实现的标准来降低成本,如果人们向您发送非 XML 的内容,那么您将得不到任何好处。

你当然可以修复它,但你我没有理由承担因为不关心质量的数据提供者而产生的费用。

关于java - 使用 DOM 包 JAVA 进行 XML 抓取 "&nbsp entity error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43930488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com