我有一个 XML 文件,我需要在其中搜索特定标签并更新它的值。问题是,使用 Sax 解析器是“必须的”。我必须通过“仅”使用 Sax Parser 来找到这些标签,dom stax j4dom dom4j 解析器不在考虑范围之内。
我可以通过将我的 xml 文件转换为字符串并使用 sax 解析器解析它并按StringBuilder
对象附加新值来完成此任务吗?会好吗?或者你会推荐什么?
我有一个 XML 文件,我需要在其中搜索特定标签并更新它的值。问题是,使用 Sax 解析器是“必须的”。我必须通过“仅”使用 Sax Parser 来找到这些标签,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);
}
如果不考虑时间而考虑内存,SAX 解析器不是一个糟糕的选择。