簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM