首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >org.xml.sax.SAXParseException:对实体"T“的引用必须以分隔符”;“结尾

org.xml.sax.SAXParseException:对实体"T“的引用必须以分隔符”;“结尾
EN

Stack Overflow用户
提问于 2009-12-22 13:52:49
回答 5查看 65.9K关注 0票数 17

我正在尝试使用DOM解析器解析一个包含一些特殊字符(如"&“)的XML文件。我得到了一个saxparse异常“对实体的引用必须以一个分隔符结尾”。有没有办法克服这个异常,因为我不能修改XML文件来删除特殊字符,因为它来自不同的应用程序。请建议一种解析此XML文件以获取根元素的方法?

提前感谢

这是我正在解析的XML的一部分

代码语言:javascript
复制
<P>EDTA/THAM WASH 
</P>

<P>jhc ^ 72. METER SOLVENT: Meter 21 LITERS of R. O. WATER through the add line into 
FT-250. Start agitator. 
</P>

<P>R. O. WATER &lt;ZLl LITERS </P>

<P>•     NOTE: The following is a tool control operation. The area within 10 feet of any open vessel or container is under tool control. </P>

<P>-af . 73. CHARGE SOLIDS: Remove any unnecessary items from the tool controlled area. Indicate the numbers of each item that will remain in the tool controlled area during the operation in the IN box of the Tool Control Log. </P>

<P>^___y_ a. To minimize the potential for cross contamination, confirm that no other solids are being charged or packaged in adjacent equipment. </P>

<P>kk k WARNING: Wear protective gloves, air jacket and use local exhaust when handling TROMETHAMINE USP (189400) (THAM) (K-l--Irritant!). The THAM may be dusty. </P>

<P>-&lt;&amp;^b .   Charge 2.1 KG of TROMETHAMINE USP (189400) (THAM) into FT-250 through the top. </P>

<P>TROMETHAMINE USP (189400) (THAM) </P>

<P>Scale ID:     / / 7S </P>

<P>LotNo.:   qy/o^yo^ </P>

<P>Gross:    ^ . S </P>

<P>Tare: 10 ,1 </P>

<P>Net:     J^l </P>

<P>Total:   JL'J </P>

<P><Figure ActualText="&T ">

<ImageData src="images/17PT 07009K_img_1.jpg"/>
&amp;T </Figure>
Checked by </P>
EN

回答 5

Stack Overflow用户

发布于 2009-12-22 16:34:38

正如其他人所说的,您的XML肯定是无效的。但是,如果您不能更改生成应用程序,并且可以添加清理步骤,则以下步骤应清理XML:

代码语言:javascript
复制
String clean = xml.replaceAll( "&([^;]+(?!(?:\\w|;)))", "&amp;$1" );

正则表达式所做的是查找任何格式错误的实体引用并转义与符号。

具体地说,(?!(?:\\w|;))是一个否定前瞻,它使匹配在任何不是单词字符(a-z,0-9)和不是分号的地方停止。因此,整个正则表达式获取从&到第一个非单词、非分号字符为止的所有内容。

它将除&符号之外的所有内容放入第一个捕获组中,以便可以在替换字符串中引用它。这是1美元。

请注意,这不会修复看起来有效但实际上无效的引用。例如,如果使用&T;,则会抛出完全不同类型的错误,除非XML实际定义了实体。

票数 32
EN

Stack Overflow用户

发布于 2012-03-29 19:29:00

在向XML模板添加或更改任何代码时,您中的一些人可能熟悉错误“对实体XX的引用必须以‘;’分隔符结尾”。当我试图修改或添加一些代码到我的博客博客的模板(XML)时,有时我也会遇到这样的错误。

大多数情况下,当我们向XML模板添加任何第三方横幅或小部件时,这些类型的错误就会发生。我们可以通过对添加的代码片断稍作修改来轻松地纠正这个错误!

代码语言:javascript
复制
Just replace “&” with “&amp;” in your HTML/Javascript code!

示例

代码语言:javascript
复制
Original Code:
<!– Begin Code –>
<script src="http://XXXXXX.com/XXX.php?sid=XXX&br=XXX&dk=XXXXXXXXXXXX" type="text/javascript"/>
<!– End Code –>

Altered Code:

<!– Begin Code –>
<script src="http://XXXXXX.com/XXX.php?sid=XXX&amp;br=XXX&amp;dk=XXXXXXXXXXXX" type="text/javascript"/>
<!– End Code –>
票数 9
EN

Stack Overflow用户

发布于 2013-10-02 04:46:50

基于上面来自PSpeed的答案,下面的replaceAll正则表达式和替换文本将用转义的和号替换所有未转义的和号。

代码语言:javascript
复制
String clean = xml.replaceAll( ("(&(?!amp;))", "&amp;") );

该模式是一个负向先行查找,用于匹配任何尚未转义的和号,而替换字符串只是一个转义的和号。这可以通过使用静态编译模式来进一步优化性能。

代码语言:javascript
复制
private final static Pattern unescapedAmpersands = Pattern.compile("(&(?!amp;))");

...

Matcher m = unescapedAmpersands.matcher(xml);
String xmlWithAmpersandsEscaped = m.replaceAll("&amp;");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1944392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档