我有一个XML文件,我需要在其中搜索特定的标签并更新它的值。问题是,使用Sax解析器是“必须”。我必须使用Sax Parser“only”找到这些标签,dom stax j4dom dom4j解析器不在考虑范围内。
我可以通过将我的xml文件转换为字符串并使用sax解析器解析它并通过StringBuilder
对象追加新值来完成此任务吗?会没事吗?或者你会推荐什么?
答案 0 :(得分:10)
这是一个有效的代码,只需添加缺少的导入。它使用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);
}
答案 1 :(得分:0)
如果时间不是考虑因素,那么SAX解析器并不是一个糟糕的选择。