java stax 获取内部节点的字符串

标签 java xml stax

我正在使用 java stax XMLStreamReader 来读取 xml。我想抓取某些内部节点的整个字符串。

XML:

<example>
   <ignoreMe>
      <bla></bla>
   </ignoreMe>
   <getMe>
      <data></data>
   </getMe>
</example>

我只是希望能够获取字符串中的整个内部 getMe 节点。 IE:

   <getMe>
      <data></data>
   </getMe>

这是我所拥有的..但我被困住了:

XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next();  
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {

    switch (event) {
    case XMLStreamConstants.START_ELEMENT:
        if (parser.getLocalName().equals("GetMe")) {
             //??????????????????

最佳答案

我上周开始学习 StaX,但如果您仍在寻找问题的答案,这可能会对您有所帮助:

    XMLInputFactory xmlif = XMLInputFactory.newInstance();
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
    XMLStreamReader xmlsr;
    String resultat="";
    boolean isGetme=false;

    try {
        xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
        int eventType;
        while (xmlsr.hasNext()) {
            eventType = xmlsr.next();
            switch (eventType) {
                case XMLStreamConstants.START_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        isGetme=true;
                    }
                    if(isGetme){
                        resultat+="<"+xmlsr.getLocalName()+">";
                    }
                    break;
                case XMLStreamConstants.CHARACTERS:
                    if(isGetme){
                        resultat+=xmlsr.getText();
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                        isGetme=false;
                    }
                    if(isGetme && !xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                    }
                    break;
                default:
                    break;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    System.out.println(resultat);

这段代码将获取所有内部节点和文本内容,并将其存储到一个字符串中。 即:

<getMe>
      <data>test</data>
</getMe>

但是,这段代码相当“丑陋”,并且肯定不是您正在寻找的最佳解决方案,JDOM 可能更适合您的需求。

关于java stax 获取内部节点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149183/

相关文章:

java - Struts2 全局异常 - 原始异常源

Android Studio xml 未将 png 转换为可绘制对象

java - JAXB如何处理继承

c++ - 在 .net c++ 中使用 XmlDocument 编写 XML

java - 如何在 CDATA 之外编写未转义的 XML

java - 添加一个 TestExecutionListener

java - elasticsearch中执行From/Size时的范围

java - 使用 STaX 解析多个 XML 片段

java - XMLStreamException : The namespace URI has not been bound to a prefix, IBM jre

java - PathParam 与 Jersey REST