【问题标题】:Dynamically reading raw XML elements as text in Java在 Java 中动态读取原始 XML 元素作为文本
【发布时间】:2011-12-04 15:07:06
【问题描述】:

假设一个具有未知结构(即未知元素和属性名称)的 XML 文件,例如

<RootElement>
   <Level 1 ...>
        <Level 2 ...>
            ...
        </Level 2>
        <Level 2 ...>
            ...
        </Level 2>
    </Level 1>
    <Level 1 ...>
        <Level 2 ...>
            ...
        </Level 2>
        <Level 2 ...>
            ...
        </Level 2>
    </Level 1>
</RootElement>

有什么方法可以使用 StAX 获取每个元素的完整原始文本

至少,如何在第一级做到这一点,即在上面的示例中(忽略漂亮的打印)我们如何在 Java 字符串变量中读取以下 2 个字符串:

"<Level 1 ...><Level 2...>...</Level 2></Level 1>"

"<Level 1 ...><Level 2...>...</Level 2></Level 1>"

【问题讨论】:

    标签: java xml stax


    【解决方案1】:

    一起使用 XMLStreamReader 和 XMLStreamWriter 来获取(生成)您想要的任何原始 XML。看起来你可以为更简单的解决方案做一些技巧,但你不能——需要解析 XML,否则你就陷入困境,如果你想破解解析器,通常会实现它们带有内部缓冲,这使得正确切割传入流变得有点繁琐。

    编辑:使用this question 中的解析模式来跟踪关卡。要编写,请以自己的方式处理输入中的每种事件类型 - 请注意,您可以迭代所有属性以及开始元素事件的命名空间。

    【讨论】:

    • 我猜这是解决方案,但还没有设法将两者结合起来。任何代码示例都会有所帮助。谢谢!
    • 该示例读取特定标签(“Whatever 1”),我需要原始 XML 文本(带有标记)。此外,似乎 XMLEventReader 更合适。周围似乎没有这样的示例代码!
    • 例子可以修改。在开始和结束元素事件的示例中增加和减少级别,也添加对其他类型事件的支持。
    • 由于 XmlStreamReader api,您似乎确实已经读过然后又写了,但是它可以实现 readRaw() 方法来读取整个文本,包括元素的子元素。不幸的是,它不存在。
    【解决方案2】:

    不,XMLStreamReader 允许您使用 getElementText() 获取 纯文本 xml 节点的 文本内容 >,要获得完整的内容,您必须自己阅读文件并获取元素并重建 XML。

    但也许你想做的是别的。为什么不解释一下为什么需要这个?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多