提问人:eastwater 提问时间:6/27/2023 更新时间:6/27/2023 访问量:69
XML 解析器:快速将元素内的所有内容解析为文本?
XML parser: quick way to parse everything inside an element as text?
问:
XML 解析器:快速将元素内的所有内容解析为文本?例如,
<foo>
text
<bar>
<![CDATA[ ... ]]>
<hello><world></world>
</hello>
</bar
text
</foo>
如何解析 as 文本中的所有内容,就好像它被包裹起来一样<foo>
<![CDATA[ ]]>.
这样做的原因是它已经嵌套了。嵌套 CDATA 使人工读/写变得更加困难。<![CDATA[ ]]>.
SAXParser/StreamParser 使用回调或事件,元素/属性/文本需要连接在一起。有没有更有效的方法?
有没有办法告诉 XML 解析器将元素内的所有内容都视为 TEXT?XML 架构可以做到吗?
答:
你问......
有没有办法告诉 XML 解析器将元素内的所有内容都视为 TEXT?XML 架构可以做到吗?
...你的意思
如何将 <foo> 中的所有内容解析为文本,就好像它被 .
<![CDATA[ ]]>
.这意味着你会得到一个包含以下文字内容的结果字符串:*
text
<bar>
<![CDATA[ ... ]]>
<hello><world></world>
</hello>
</bar
text
也就是说,包括所有空格和所有标记、注释、处理指令和 CDATA 部分的文本表示形式。我无法将其与...
这样做的原因是它已经嵌套了..嵌套 CDATA 使人类更难读/写。
<![CDATA[ ]]>
.也就是说,我不反对 CDATA 部分难以阅读,但我不明白这如何建议创建包含 CDATA 部分文本版本的字符串。
我也很难用...
SAXParser/StreamParser 使用回调或事件,元素/属性/文本需要连接在一起。有没有更有效的方法?
...因为 SAXParser 不允许你按照你的要求去做。尽管可以使用 SAX 回调来重新构造已分析的 XML 的文本表示形式,但不会
- 将 CDATA 部分复制为文本(仅其内容),
- 确保逐字复制标签(SAX 不传达内部空格、属性引号类型和空标签的表示样式),
- 避免在文本和属性值中(但在 CDATA 部分之外)至少扩展一些实体引用,或者
- 保留评论。
可能还有其他问题。如果您的目标是执行某种 XML 清理以提高人类的可读性,那么请注意,此类过程发出的字符串不构成格式正确的 XML 元素内容的风险相当高。毕竟,CDATA 部分和许多实体引用的目的之一正是表达如果按字面意思表达会使文档格式不正确的内容。该转义函数将丢失,因此,如果您希望能够将内容重新解析为 XML,则需要重新转义内容。
如果您确实想要提取 XML 元素的原始文本,那么不,据我所知,没有 XML API 提供它,并且 XML 架构无法做到这一点。XML 技术适用于文档结构,但您似乎希望覆盖文档结构。您可能需要编写自己的 XML 解析器,如果这实际上是您想要执行的操作。
*或者至少,这是我对你的意思的最佳猜测。CDATA 部分不嵌套,因此,如果从字面上将包含原始元素文本的 CDATA 文本包装在 CDATA 部分中,则结果的 XML 解释将有所不同,并且不太可能是您真正想要的。
评论
<foo>
评论