-2

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

消息==女士

输出==

'

这是代码

  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 {
                }
4

1 回答 1

1

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

例如,我可以想象以下 XML

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

产生以下事件:

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

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

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

于 2012-11-17T11:01:08.007 回答