当前位置: 首页 > 面试题库 >

SAX解析和特殊字符

芮祺
2023-03-14
问题内容

我想使用SAX解析器解析xml文件中的一些数据。我的xml如下:

<categories>
 <cat>Pies &amp; past</cat>
 <cat>Fruits</cat>
</categories>

为了解析此数据,我扩展了DefaultHandler。

解析后的输出为:

cat 1 = Pies

cat 2 = &

cat 3 = past

cat 4 = Fruits

为什么发生这种情况而不是得到:

cat 1 = Pies & past

cat 2 = Fruits

问题答案:

我的猜测是,您将每次调用都characters视为交付cat元素的完整文本。您应该对处理程序进行编码,以便连续调用以characters累积文本,并且仅在endElement事件发生时捕获它:

public class CatHandler extends DefaultHandler {
    private StringBuilder chars = new StringBuilder();

    public void startElement(String uri, String lName, String qName, Attributes a)
    {
        final String name = qName == null ? lName : qName;
        if ("cat".equals(name)) {
            chars.setLength(0);
        } else . . .
    }

    public void endElement(String uri, String lName, String qName) {
        final String name = qName == null ? lName : qName;
        if ("cat".equals(name)) {
            String catName = chars.toString();
            // do something with cat name
        } else . . .
    }

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


 类似资料:
  • 问题内容: 我有一个XML文件,我需要在其中搜索特定的标签并更新其值。问题在于,使用Sax解析器是“必须的”。我必须通过“仅”使用Sax解析器来找到这些标签,dom stax j4dom dom4j解析器不在考虑范围之内。 我可以通过将xml文件转换为字符串并使用sax解析器对其进行解析并按对象附加新值来完成此任务吗?可以吗 或您会推荐什么? 问题答案: 这是一个有效的代码,只需添加缺少的导入。它

  • 问题内容: 我需要解析一个XML流。由于我只需要做一次就可以构建我的java对象,因此SAX看起来很自然。我正在扩展DefaultHandler并实现startElement,endElement和character方法,在我的类中具有保存当前读取值(在characters方法中使用)的成员。 我可以轻松完成所需的工作,但是我的代码变得相当复杂,并且我确信没有理由这样做,并且我可以做不同的事情。我

  • 问题内容: 我正在将某些Web“服务”从WCF Rest转换为MVC3。 我们的旧网络服务使用以下命令从POCO返回JSON就好了: 在我的控制器中返回一个简单的poco,我使用JsonResult作为返回类型,并使用创建json 。 在WCF Rest服务中,撇号和特殊字符在呈现给客户端时会被格式化。 在MVC3控制器中,撇号显示为\ u0027。 有什么想法吗?我是序列化JSON的新手,因此任

  • 问题内容: 有人可以帮我,如何解析JSON中的特殊字符?自从我制作德语应用程序以来,它包含许多特殊字符,例如ä,ö,ü,ß。有人可以告诉我如何通过解析JSON显示那些字符吗?现在,它们仅显示为“?” 这是我的JSON解析方法: 谢谢。 问题答案: 此类字符必须至少采用UTF-8编码。检查您的文件是否已保存在此编码中。

  • 问题是,有时属性值包含需要对此处指定的整个过滤器进行转义的特殊字符: https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85). aspx 和此处指定的专有名称ATITBUTE值: https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85). aspx 为了实现这一点,服务必须执行