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

使用sax解析器解析和修改xml字符串

鄢子平
2023-03-14
问题内容

我有一个XML文件,我需要在其中搜索特定的标签并更新其值。问题在于,使用Sax解析器是“必须的”。我必须通过“仅”使用Sax解析器来找到这些标签,dom
stax j4dom dom4j解析器不在考虑范围之内。

我可以通过将xml文件转换为字符串并使用sax解析器对其进行解析并按StringBuilder对象附加新值来完成此任务吗?可以吗 或您会推荐什么?


问题答案:

这是一个有效的代码,只需添加缺少的导入。它使用SAX并更改<name>user1</name><name>user2</name>。如果弄清楚它是如何工作的,还可以阅读SAX
API,则可以对xml进行任何操作。请注意,在StAX诞生之前,SAX被认为是最高效的xml解析器。

public static void main(String[] args) throws Exception {
    String xml = "<users><user><name>user1</name></user></users>";
    XMLReader xr = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) {
        private String tagName = "";
        @Override
        public void startElement(String uri, String localName, String qName, Attributes atts)
                throws SAXException {
            tagName = qName;
            super.startElement(uri, localName, qName, atts);
        }
        public void endElement(String uri, String localName, String qName) throws SAXException {
            tagName = "";
            super.endElement(uri, localName, qName);
        }
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            if (tagName.equals("name")) {
                ch = "user2".toCharArray();
                start = 0;
                length = ch.length; 
            }
            super.characters(ch, start, length);
        }
    };
    Source src = new SAXSource(xr, new InputSource(new StringReader(xml)));
    Result res = new StreamResult(System.out);
    TransformerFactory.newInstance().newTransformer().transform(src, res);
}


 类似资料:
  • 主要内容:Java SAX解析器 修改XML文档的示例Java SAX解析器 修改XML文档的示例 需要修改的文件input.xml 编写修改XML文档的解析处理类 控制台输出结果为: 在项目根目录下生成新的文件input-updated.xml,内容如下:  

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax Implementation 让我

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax实现 让我们从实现开始。 你首先必须

  • 主要内容:Java SAX解析器 解析XML文档的示例Java SAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写DefaultHandler的事件处理程序 编写核心解析处理类 输出结果为:

  • 问题 你想读取一个XML文档,对它最一些修改,然后将结果写回XML文档。 解决方案 使用 xml.etree.ElementTree 模块可以很容易的处理这些任务。 第一步是以通常的方式来解析这个文档。例如,假设你有一个名为 pred.xml 的文档,类似下面这样: <?xml version="1.0"?> <stop> <id>14791</id> <nm>Clark &amp

  • 问题内容: 我想使用SAX解析器解析xml文件中的一些数据。我的xml如下: 为了解析此数据,我扩展了DefaultHandler。 解析后的输出为: 为什么发生这种情况而不是得到: 问题答案: 我的猜测是,您将每次调用都视为交付元素的完整文本。您应该对处理程序进行编码,以便连续调用以累积文本,并且仅在事件发生时捕获它: