[英]Parsing and modifying xml string with sax parser
我有一個XML文件,我需要在其中搜索特定的標簽並更新它的值。 問題是,使用Sax解析器是“必須”。 我必須使用Sax Parser“only”找到這些標簽,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解析器不是一個糟糕的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.