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

vas*_*thi 17 java xml

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

提前致谢

这是我正在解析的XML部分

<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>
Run Code Online (Sandbox Code Playgroud)

PSp*_*eed 29

正如其他人所说,你的XML肯定是无效的.但是,如果您无法更改生成应用程序并可以添加清理步骤,那么以下内容应该清理XML:

String clean = xml.replaceAll( "&([^;]+(?!(?:\\w|;)))", "&amp;$1" );
Run Code Online (Sandbox Code Playgroud)

正则表达式正在做的是寻找任何形式错误的实体引用并转义&符号.

具体来说,(?!(?:\\w|;))是一个负向前瞻,使得该匹配停止在任何不是单词字符(az,0-9)而不是分号的任何内容上.所以整个正则表达式都抓住了所有的东西,而不是一个; 直到第一个非单词,非分号字符.

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

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

  • 是的.尝试"&([^;&] +(?!(?:\\ w |;)))"(在pos 6上添加&) - 这应该适用于输入中的多个&. (6认同)

pax*_*blo 12

我不确定我理解这个问题.据我所知,除非你在里面,否则没有关闭的CDATA裸体&角色;无效.

如果你的XML文件不是这样,那么它就是无效的,你需要找到另一种解析它的方法,或者在SAX获得它之前修复它.

如果我在这里误解了一些东西,你应该发布实际XML的样本,这样我们就可以进一步了解.

更新:

看起来像:

Figure ActualText="&T "
Run Code Online (Sandbox Code Playgroud)

是令人讨厌的线.这个部分是否在CDATA?如果没有,这不是有效的XML,你不应该期望SAX能够处理它.

你需要:

  • 更改创建它的应用程序; 要么
  • 在它被SAX(如果你不能改变那个应用程序)加载到像" Figure ActualText="&amp;T ""之类的东西之前修复它; 要么
  • 找到一个非SAX方法进行解析.


Ran*_*ddy 8

有些人可能熟悉错误"对实体XX的引用必须以';'结尾 分隔符"在向XML模板添加或更改任何代码时.甚至当我试图改变或添加一些代码到我的博客博客模板(XML)时,我甚至会得到错误.

当我们向XML模板添加任何第三方横幅或小部件时,通常会出现这种错误.我们可以通过对我们添加的代码进行轻微更改来轻松纠正错误!

Just replace “&” with “&amp;” in your HTML/Javascript code!
Run Code Online (Sandbox Code Playgroud)

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 –>
Run Code Online (Sandbox Code Playgroud)