0

我有一个 XML 文档,其中包含如下属性:

<Tag Body="&lt;p&gt;">

我想完全按原样保留 Body 属性中的文本;但是,解析方法是将文本转换为“<p>”。我想保留“&”、“l”、“t”、“;”等。

我正在使用 Java SAX API 来解析 XML 文档,如下所示:

    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser saxParser = spf.newSAXParser();
    XMLReader xmlReader = saxParser.getXMLReader();
    xmlReader.setContentHandler(new MyHandler());
    xmlReader.setErrorHandler(new MyErrorHandler(System.err));
    xmlReader.parse(convertToFileURL(myFileName));

中的相关代码MyHandler.java为:

public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
throws SAXException
{
    if (qName.equals("Tag")){
        String Body = atts.getValue("Body");
        char []s = Body.toCharArray();  // s[0] will be "<", but I want it to be "&"
    }
}

如何获得解析方法以单独保留属性文本而不尝试转换任何内容?

4

1 回答 1

0

我会回答我自己的问题。

我没有找到一种方法来阻止解析器对文本进行转义,但我确实找到了一种解决方法(thatnks @user1516873),之后使用 Apache Commons 重新转义它:

String Body = atts.getValue("Body");
String Body_escaped = StringEscapeUtils.escapeXml(Body);

这达到了预期的结果。

于 2013-10-30T18:40:48.303 回答