【问题标题】:Xml parsing in java changing stringjava中的xml解析更改字符串
【发布时间】:2012-11-05 22:27:45
【问题描述】:

我正在通过 smack api 制作聊天应用程序。当我发送包含此字符' 的消息时, 输出为

message== 女士

输出==

'

上午

这里是代码

  StringEscapeUtils.unescapeHtml((new String(ch, start, length).replace("'", "`").replace("'", "'")));

这里是代码

DefaultHandler handler = new DefaultHandler() {
                @Override
                public void startDocument() throws SAXException {
                }

                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {                        
                        for (int i = 0; i < attributes.getLength(); i++) {
                            if (attributes.getLocalName(i).equalsIgnoreCase("from")) {
                                from = attributes.getValue(i);
                                break;
                            }
                        }                        
                   ....
                }

                @Override
                public void characters(char ch[], int start, int length) throws SAXException {
                    String str = StringEscapeUtils.unescapeHtml((new String(ch, start, length)));                    
                    switch (elementType) {
                        case 1:
                            msg = str;
                            break;
                     ...
                        default:
                           ...
                            break;
                    }
//                  

                @Override
                public void endElement(String uri, String localName, String qName) throws SAXException {
                }

                @Override
                public void endDocument() throws SAXException {
                }

【问题讨论】:

    标签: java xml swing parsing stringescapeutils


    【解决方案1】:

    XML 解析器通常会将文本元素分解为多个字符节点。从 XML 的角度来看,这是完全有效的。所以你需要适当地处理这个问题。 所以也许问题出在打印,而不是转义。

    例如我可以想象下面的 XML

    <n>A &amp; B</n>
    

    产生以下事件:

    1. 开始节点n
    2. 文本节点“A
    3. 文本节点“&amp;amp;
    4. 文本节点“B
    5. 结束节点n

    现在,如果您 println 您看到的每个字符“事物”,您将得到三行而不是一行。也许您的解析器可以选择强制“规范化”事件以加入连续文本节点。

    (对不起,如果我没有使用所有适当的 XML 术语。我的 XML 术语已经有点生疏了,所以请随时编辑这个问题并输入正确的 XML 术语。谢谢)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-05-13
      • 1970-01-01
      • 2012-12-04
      相关资源
      最近更新 更多