【魅族科技发帖调侃河南】{"h":1,"s":"164ea01ba018822ab36a6f985be44ff6","p":&quo

java - org.xml.sax.SAXParseException: The reference to entity &T& must end with the ';' delimiter - Stack Overflow
to customize your list.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
Join the Stack Overflow community to:
Ask programming questions
Answer and help your peers
Get recognized for your expertise
I am trying to parse an XML file whcih contains some special characters like "&" using DOM parser. I am getting the saxparse exception "the reference to entity must end with a a delimiter". Is there any way to overcome this exception, since I can not modify the XML file to remove the special characters, since it is coming from different application. Please suggest a way to parse this XML file to get the root element?
Thanks in advance
This the part of the XML which I am parsing
&P&EDTA/THAM WASH
&P&jhc ^ 72. METER SOLVENT: Meter 21 LITERS of R. O. WATER through the add line into
FT-250. Start agitator.
&P&R. O. WATER &ZLl LITERS &/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&-&&^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&
^ . S &/P&
&P&Tare: 10 ,1 &/P&
&P&&Figure ActualText="&T "&
&ImageData src="images/17PT 07009K_img_1.jpg"/&
&T &/Figure&
Checked by &/P&
178k33378492
As others have stated, your XML is definitely invalid.
However, if you can't change the generating application and can add a cleaning step then the following should clean up the XML:
String clean = xml.replaceAll( "&([^;]+(?!(?:\\w|;)))", "&$1" );
What that regex is doing is looking for any badly formed entity references and escaping the ampersand.
Specifically, (?!(?:\\w|;)) is a negative look-ahead that makes that match stop at anything that is not a word character (a-z,0-9) and not a semi-colon.
So the whole regex grabs everything from the & up until the first non-word, non-semi-colon character.
It puts everything except the ampersand in the first capture group so that it can be referred to in the replace string.
That's the $1.
Note that this won't fix references that look like they are valid but aren't.
For example, if you had &T; that would throw a different kind of error altogether unless the XML actually defines the entity.
I'm not sure I understand the question. As far as I'm aware, unless you're inside a CDATA, naked & characters without a closing ; are invalid.
If that's not the case for your XML file, then it's invalid, and you'll need to find another way of parsing it, or fixing it before SAX gets a hold of it.
If I'm misunderstanding something here, you should probably post a sample of the actual XML so we can hep further.
It looks like:
Figure ActualText="&T "
is the offending line. Is this section within a CDATA or not? If not, this is not valid XML and you should not expect SAX to be able to handle it.
You'll need to either:
change the applica or
fix it before it's loaded by SAX (if you can't change that application) to something like "Figure ActualText="&T ""; or
find a non-SAX method for parsing.
474k1149381397
Some of you might be familiar with the ERROR “The reference to entity XX must end with the ‘;’ delimiter” while adding or altering any piece of code to your XML Templates. Even I get that ERROR sometimes when I try to alter or add some codes to my blogger blog’s templates(XML).
Mostly these kind of ERRORS occur while we add any third-party banner or widgets to our XML Templates. We can easily rectify that ERROR by making a slight alteration in the piece of code we add!
Just replace “&” with “&” in your HTML/Javascript code!
Original Code:
&!– Begin Code –&
&script src="/XXX.php?sid=XXX&br=XXX&dk=XXXXXXXXXXXX" type="text/javascript"/&
&!– End Code –&
Altered Code:
&!– Begin Code –&
&script src="/XXX.php?sid=XXX&br=XXX&dk=XXXXXXXXXXXX" type="text/javascript"/&
&!– End Code –&
2,28053160
As a workaround, you can:
Replace all the occurrences of & with & i
In your code that handles the result, handle the case where you now get escaped characters (e.g. & instead of &).
Depending on the parser you're using, you can also try to find the class responsible for parsing and unescaping &-strings, and see if you can extend it/supply your own resolver. (What I'm saying is very vague, but the specifics depend on the tools you're using.)
4,91821632
Your input is invalid XML.
Specifically, you cannot have an '&' character in an attribute value unless it is part of a well-formed character entity reference.
AFAIK, you have two choices:
Write a "not exactly XML" parser yourself.
I seriously doubt that you will find an existing one.
Any self-respecting XML parser will reject invalid input.
Fix whatever is creating this (so-called) XML so that it doesn't put random '&' characters in places where they are not allowed.
It's quite simple really.
As you are building the XML, replace the '&' character that is not already part of a character reference with '&'
373k41387714
Building on an answer above from PSpeed the following replaceAll regex and replacement text will replace all unescaped ampersands with escaped ampersands.
String clean = xml.replaceAll( ("(&(?!))", "&") );
The pattern is a negative lookahead to match on any ampersands that have not yet been escaped and the replacement string is simply an escaped ampersand.
This can be optimized further for performance by using a statically compiled Pattern.
private final static Pattern unescapedAmpersands = pile("(&(?!))");
Matcher m = unescapedAmpersands.matcher(xml);
String xmlWithAmpersandsEscaped = m.replaceAll("&");
Simply replace your & with & and it will work.
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled}

我要回帖

更多关于 魅族科技招聘 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信