4

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

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

4

2 回答 2

11

这是一个工作代码,只需添加缺少的导入。它使用 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);
}
于 2012-12-03T17:46:23.293 回答
0

如果不考虑时间而考虑内存,SAX 解析器不是一个糟糕的选择。

于 2012-12-03T17:04:38.540 回答