当前位置: 首页 > 面试题库 >

无法使用Stax中的XMLEventReader检查XML中的CDATA

傅乐湛
2023-03-14
问题内容

我无法检查XML中的CDATA并无法使用XMLEventReader读取它。

以下是示例:

 <name>HEADERS</name>
                        <data>
                            <![CDATA[ Sat Nov 19 18:50:15 2016 (1672822) 
]]>
                            <![CDATA[Sat, 19 Nov 2016 18:50:14 -0800 (PST)       
]]>
                        </data>

我正在使用的Stax api的XMLEventReader如下:

 while (eventReader.hasNext()) {
        XMLEvent event = eventReader.nextEvent();

        if (event.isCharacters()) {
            System.out.println(event.asCharacters().isCData());
            System.out.println(event.asCharacters().getData());
 }
  }

因此,当我读取字符的数据标签时,event.asCharacters()。isCData()会为假。想知道如何在EventReader中检查CDATA以及如何获取CDATA。


问题答案:

使用以下模式:

  switch (EventType) {
        case XMLStreamConstants.CHARACTERS:
        case XMLStreamConstants.CDATA:
            System.out.println(r.getText());
            break;
        default:
            break;
        }

完整样本:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

public void readCDATAFromXMLUsingStax() {
    String yourSampleFile = "/path/toYour/sample/file.xml";
    XMLStreamReader r = null;
    try (InputStream in =
            new BufferedInputStream(new FileInputStream(yourSampleFile));) {
        XMLInputFactory factory = XMLInputFactory.newInstance();
        r = factory.createXMLStreamReader(in);
        while (r.hasNext()) {
            switch (r.getEventType()) {
            case XMLStreamConstants.CHARACTERS:
            case XMLStreamConstants.CDATA:
                System.out.println(r.getText());
                break;
            default:
                break;
            }
            r.next();
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    } finally {
        if (r != null) {
            try {
                r.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}

使用/path/toYour/sample/file.xml

 <data>
    <![CDATA[ Sat Nov 19 18:50:15 2016 (1672822)]]>
    <![CDATA[Sat, 19 Nov 2016 18:50:14 -0800 (PST)]]>
 </data>

给出:

 Sat Nov 19 18:50:15 2016 (1672822)                             
 Sat, 19 Nov 2016 18:50:14 -0800 (PST)


 类似资料:
  • 问题内容: 是否可以使用StAX(特别是woodstox)使用换行符和制表符来格式化输出xml,即采用以下格式: 代替: 如果在woodstox中无法做到这一点,是否还有其他轻量级的lib可以做到这一点? 问题答案: 通过JDK :。

  • 问题内容: 我第一次使用stax解析XML字符串。我找到了一些示例,但无法使我的代码正常工作。这是我的代码的最新版本: 我将手表放在“事件”和“ reader.getElementText()”上。当代码停止时 将显示“ reader.getElementText()”值,但是一旦它偏离该行,就无法评估。当代码停止时: “元素”手表显示正确的值。最后,当我又将代码步进一行时,我捕获了此异常: 我尝

  • 因此,我为DFS编写了以下代码: 现在,我读到,在一个无向图中,如果当DFS时,它再次返回到同一个顶点,有一个循环。所以我做的是这样,, 但是,我的检查周期函数返回true,即使他们没有周期。那是为什么呢?我的功能有问题吗?没有执行问题,否则我早就调试了,但他们似乎在我的逻辑中有问题。

  • 我正在使用Spring Framework。在编写自定义查询时,我无法检查布尔值的参数。例如,这不起作用: 上述检查不起作用,当布尔变量(booleanVariable)为true和false时,这两种情况下的计算结果相等。 我试图替换和"false"。 是否可以像上面那样检查XML中的布尔属性?

  • 问题内容: 输入文件包含数千个XML格式的事务,大小约为10GB。要求是根据用户输入选择每个事务XML,并将其发送到处理系统。 文件的样本内容 希望(技术)用户提供输入标签名称,例如。 我们希望提供更通用的解决方案。文件内容可能会有所不同,用户可以使用XPath表达式(例如“ ”)来选择单个事务。 这里我们需要考虑的技术问题很少 该文件可以位于共享位置或FTP 由于文件很大,因此我们无法在JVM中

  • 问题内容: 我目前正在开发一个带有嵌入式文本编辑器的程序。用户应该在编辑器中键入Java代码。然后,将输入编辑器中的代码制成字符串。我只想要一些可以检查缺少括号的内容或不带钩子的尝试,等等。它不需要编译。我已经看了很多遍,但是我还是编程新手,无法实现一些较难的东西。 因此,使其更简短:我正在寻找一些Java软件包,该软件包将分析代码中的语法错误。 问题答案: 从Java 6开始,您可以使用Java