【问题标题】:Remove invalid characters from String when parsing XML in Java在 Java 中解析 XML 时从 String 中删除无效字符
【发布时间】:2011-11-08 10:20:55
【问题描述】:

我一直在谷歌搜索和阅读 SO,但没有任何效果。我对 XML 提要中的字符有疑问。我将每个标签的值保存在一个字符串中,但是当
 发生时,它就停止了。我只得到标签中的 4-5 个第一个单词左右。

那么任何人都可以帮助我使用可以删除它的方法吗?或者可能是 XML 提要中标签中的文本对于字符串来说太长了?

谢谢!

示例代码:

    public void characters(char[] ch, int start, int length)
        throws SAXException {

    if (currentElement) {
        currentValue = new String(ch, start, length);
        currentElement = false;
    }

}

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

    currentElement = false;

    /** set value */ 
    if (localName.equalsIgnoreCase("title"))
        sitesList.setTitle(currentValue);
    else if (localName.equalsIgnoreCase("id"))
        sitesList.setId(currentValue);
    else if(localName.equalsIgnoreCase("description"))
        sitesList.setDescription(currentValue);
}

描述标签中的文字很长,但我只得到了
字符开始出现之前的前五个字。

【问题讨论】:

  • 您能否展示代码的相关部分,以及您看到的无效字符类型?

标签: java android xml parsing


【解决方案1】:

您正在使用 SAXparser 来解析 XML 字符串。

characters()-方法在只读取一个 XML 元素时可以被多次调用。当它找到类似<desc>blabla bla & # 39; bla bla la.</desc> 的东西时会发生这种情况。

解决方法是使用StringBuilder,并在characters()-方法中追加读取的字符,然后在endElement()-方法中重置StringBuilder

private class Handler extends DefaultHandler{

    private StringBuilder temp_val;

    public Handler(){
        this.temp_val = new StringBuilder();
    }

    public void characters(char[] ch, int start, int length){
        temp_val.append(ch, start, length);
    }

    public void endElement(String uri, String localName, String qName){
        System.out.println("Output: "+temp_val.toString());
        // ... Do your stuff
        temp_val.setLength(0); // Reset the StringBuilder
    }

}

鉴于此 XML 文件,上述代码适用于我:

<?xml version="1.0" encoding="iso-8859-1" ?>
<test>This is some &#13; example-text.</test>

输出是:

输出:这是一些
示例文本。

【讨论】:

  • 所以当我设置值时我应该使用 temp_val.toString() ?
  • endElement()-方法中设置您的值,最后,您重置StringBuilder。请更具体地说明“不起作用”。
  • 您的意思是设置值,如 temp_val.toString() ?我正是这样做的,但我仍然没有从我的描述标签中获得所有文本。当它碰到我在帖子中抱怨的角色时,它就会停止。
  • 会不会和XML的编码有关?我的是 UTF-8
  • 我所做的和你在帖子中所做的完全一样,它不会在烦人的字符之后添加任何文本。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2011-03-14
  • 1970-01-01
相关资源
最近更新 更多