在Java中动态地将原始XML元素读取为文本

3
假设有一个未知结构的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是否有办法获取每个元素的完整原始文本?

至少,对于第一层级,即在上面的示例中(忽略漂亮的打印),我们如何读取以下2个字符串并将其存储在Java字符串变量中:

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

并且

"<Level 1 ...><Level 2...>...</Level 2></Level 1>"
2个回答

2
使用XMLStreamReader和XMLStreamWriter一起获取(生成)任何原始XML。可能会觉得可以使用一些技巧来获得更简单的解决方案,但实际上不行 - XML需要被解析,否则你就会陷入困境,如果想要黑客式地解析器,它们通常是用内部缓冲区实现的,这使得正确切分传入流变得有点棘手。
编辑:使用这个问题中的解析模式来跟踪级别。要写入,请以自己的方式处理输入的每个事件类型 - 请注意,您可以迭代所有属性和开始元素事件的命名空间。

我猜这可能是解决方案,但我还没有成功将两者结合起来。任何代码示例都会有所帮助。谢谢! - PNS
这个例子读取特定标签(“Whatever 1”),我需要原始的XML文本(带有标记)。此外,似乎XMLEventReader更合适。好像周围没有任何类似的示例代码! - PNS
示例可以进行修改。在开始和结束元素事件中增加和减少级别,同时添加对其他类型事件的支持。 - ThomasRS
看起来由于XmlStreamReader api,你确实需要先读取再写入,但它可以实现一个readRaw()方法,该方法可以读取包括元素子节点在内的整个文本。不幸的是,这个方法并不存在。 - mike g

0
不,XMLStreamReader 允许您使用 getElementText() 获取仅包含文本内容的xml节点的文本内容,要获取完整内容,您将需要自己读取文件并抓取元素并重构XML。
但也许您想做的是其他事情。为什么不解释一下您需要这个的原因呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接