java - StAX XML 两个必需标签之间的所有内容

标签 java xml xml-parsing stax xmlstreamreader

开始学习 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/

相关文章:

c# - 如何在 Silverlight 中创建 XML 文档

python - ElementTree的iterparse() XML解析错误

将 KML 文件读入 R

sql - 在 SQL Server 2008 中解析 xml 时在 sql 表中获取 NULL

java - 什么是 "driver class"?

c# - 从 IEnumerable 中的任意点访问一系列元素

java - PropertySourcesPlaceholderConfigurer 和 PropertyPlaceholderConfigurer

c# - 使用 HTML Agility Pack 在 HtmlNodeCollection 中选择节点

java - OTA(空中)缩写

java - 如何使用 Java 从 Mongodb 的子文档数组中获取所需的字段