开始学习 StAX,使用 XMLStreamReader,我遇到了一些问题。如何将标签之间的所有内容作为文本获取?我的意思是,我知道所需标签的名称,当我找到它时,我必须转到关闭标签,我必须在它们之间找到的所有内容附加到某个字符串。 例如,我们有类似的东西
<rootTag>
...
<someTag>
Some text content and other tags here…
</someTag >
<tagINeed>
<someinternalTag1>
<someinternalTag11>
Some text content..
</someinternalTag11>
...
</someinternalTag1>
<someinternalTag2>
Something here
</someinternalTag2>
</tagINeed>
...
<somethingAnother>
...
</somethingAnother >
...
</rootTag>
所以,我需要把我的字符串作为
<someinternalTag1>
<someinternalTag11>
Some text content..
</someinternalTag11>
...
</someinternalTag1>
<someinternalTag2>
Something here
</someinternalTag2>
我怎样才能得到它?也许,我必须在源 xml 中找到所需 block 的开始和结束偏移量,并在解析后给出子字符串?
最佳答案
尝试
StringWriter sw = new StringWriter();
XMLOutputFactory of = XMLOutputFactory.newInstance();
XMLEventWriter xw = null;
XMLInputFactory f = XMLInputFactory.newInstance();
XMLEventReader xr = f.createXMLEventReader(new FileInputStream("test.xml"));
while (xr.hasNext()) {
XMLEvent e = xr.nextEvent();
if (e.isStartElement()
&& ((StartElement) e).getName().getLocalPart().equals("tagINeed")) {
xw = of.createXMLEventWriter(sw);
} else if (e.isEndElement()
&& ((EndElement) e).getName().getLocalPart().equals("tagINeed")) {
break;
} else if (xw != null) {
xw.add(e);
}
}
xw.close();
System.out.println(sw);
打印
<someinternalTag1>
<someinternalTag11>
Some text content..
</someinternalTag11>
</someinternalTag1>
<someinternalTag2>
Something here
</someinternalTag2>
更新:
如果你也需要XML字符串,我们可以这样写:
if (e.isStartElement() &&
((StartElement) e).getName().getLocalPart().equals("tagINeed")){
xw = of.createXMLEventWriter(sw);
xw.add(e);
} else if (e.isEndElement() &&
((EndElement) e).getName().getLocalPart().equals("tagINeed")){
xw.add(e);
break;
} else if (xw != null) {
xw.add(e);
}
关于java - StAX XML 两个必需标签之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051923/