XML在Java中编辑具有相同名称的所有标记

时间:2012-11-23 13:11:25

标签: java xml edit

我有值和标签字符串我想改变。但在我的场景中,我无法确定xml结构。

我希望做一个简单的功能,例如:

for tag.equals(tagValue){
   if found{
      oldTagText=newValue
   }
}

因此,无论结构如何,所有匹配的标签都将被更改。有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

如果你想用Java而不是XSL进行替换,那么看看StAX:http://docs.oracle.com/javase/tutorial/jaxp/stax/index.html

(注意:对于大多数StAX用例,建议使用StAX迭代器API(基于事件),AFAIK。)

答案 1 :(得分:0)

最简单的方法是SAX:

    String xml = "<root><e1>xxx</e1></root>";
    XMLFilterImpl xmlReader = new XMLFilterImpl(
            XMLReaderFactory.createXMLReader()) {

        @Override
        public void startElement(String uri, String localName,
                String qName, Attributes atts) throws SAXException {
            super.startElement(uri, localName, tagName(qName), atts);
        }

        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            super.endElement(uri, localName, tagName(qName));
        }

        private String tagName(String qName) {
            if (qName.equals("e1")) {
                return "e2";
            }
            return qName;
        }
    };
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    StringWriter s = new StringWriter();
    t.transform(new SAXSource(xmlReader, new InputSource(new StringReader(
            xml))), new StreamResult(s));
    System.out.println(s);