変更したい値とタグ文字列があります。しかし、私のシナリオでは、xml 構造について確信が持てません。
次のような単純な機能を実行したい:
for tag.equals(tagValue){
if found{
oldTagText=newValue
}
}
したがって、構造に関係なく、一致するすべてのタグが変更されます。誰でもこれを行う方法を知っていますか?
XSL ではなく Java で置き換えを行う場合は、StAX を参照してください: http://docs.oracle.com/javase/tutorial/jaxp/stax/index.html
(注: ほとんどの StAX のユースケースでは、StAX イテレーター API (イベントベース) を使用することをお勧めします。AFAIK です。)
これを行う最も簡単な方法は 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);