4

XMLファイルがあります。その中の特定のタグを検索して、その値を更新する必要があります。問題は、Saxパーサーを使用することが「必須」であるということです。Saxパーサーを「のみ」使用してこれらのタグを見つける必要があります。domstaxj4domdom4jパーサーは考慮されていません。

StringBuilderxmlファイルを文字列に変換し、saxパーサーを使用して解析し、オブジェクトごとに新しい値を追加することで、このタスクを実行できますか?大丈夫でしょうか?または、何をお勧めしますか?

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 に答える