【问题标题】:Preserve encoding after SAX parsingSAX 解析后保留编码
【发布时间】:2013-10-30 15:06:11
【问题描述】:

我有一个包含如下属性的 XML 文档:

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

我想保留 Body 属性中的文本原样;但是,解析方法是将文本转换为“

”。我想保留“&”、“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 "&"
    }
}

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

【问题讨论】:

  • &amp;lt;p&amp;gt; in xml 等于 &lt;p&gt; 在纯文本中。如果要输出 xml 编码的文本,只需 xml 编码即可,例如可以使用 StringEscapeUtils.escapeXml commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/…
  • 像 <是解析器被付钱去做的事情。
  • @user1516873 感谢您的提示。我已经根据它创建了一个答案。

标签: java xml encoding sax cdata


【解决方案1】:

我会回答我自己的问题。

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

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

这样就达到了预期的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2012-04-10
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2013-09-27
    • 2012-01-25
    相关资源
    最近更新 更多