【问题标题】:How to print x:include hierarchy如何打印 x:include 层次结构
【发布时间】:2021-12-14 14:38:08
【问题描述】:

我有大约 500 个 xml 文档,每个文档大约 20000 行。它们相互包含,完全或部分(由 xpointer 指定)

我必须弄清楚它们之间的关系。 调用 xinclude 后是否可以解析(并打印)给定文件的包含层次结构?调用历史是否存储在生成的 dom abd 中的某个位置,可从样式表访问?

对于 sample1.xml,我需要以下信息:

sample1.xml
    |- sample2.xml#xpointer(/root/elem/*)
        |- sample3.xml#xpointer(/root/elem/*)

请注意,我对 sampleX 不感兴趣,因为它不包含在 sample1.xml 中

sample1.xml
<root>
    <xi:include href="sample2.xml#xpointer(/root/elem/*)" parse="xml"/>
</root>
sample2.xml
<root>
    <elem>
        <xi:include href="sample3.xml#xpointer(/root/elem/*)" parse="xml"/>
    </elem>
    <otherElem>
        <xi:include href="sampleX.xml#xpointer(/root/elem/*)" parse="xml"/>
    </otherElem>
</root>
sample3.xml
<root>
    <elem>
       <hi/>
       <ho/>
    </elem>
</root>
sampleX.xml
<root>
    <elem />
</root>

https://www.w3.org/TR/xinclude/#creating-result 状态:

记录每个顶级被包含元素的包含历史 在包含历史扩展属性中。包含历史 属性是表示元素信息的列表 xi:include 递归包含级别的元素。

我的问题:

  1. libxml2 是否遵守规范并存储包含历史记录?
  2. 我可以通过哪些 API 调用(最好使用 xslt)访问包含历史记录?
  3. 还是我误解了规范?

任何提示表示赞赏:-)

欧克陈

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 这是您的第一个问题,我建议您阅读stackoverflow.com/help/asking。您确实需要花时间从这个(或任何)编程论坛中获得好的结果。

标签: xml xsd xslt-1.0 libxml2


【解决方案1】:

如果您对 XSLT 感到满意,那么这是一种完全可以接受的方法。我想我会这样做:

  • 使用您的技术在一个单个 XML 文档中打印所有&lt;xi:include&gt; 标记的值
  • 使用命令行 FOR 以递归方式处理所有目录中的所有 XML 文档。在 Windows 上,FOR 可以轻松做到这一点。或者在 Linux 上find

如果依赖关系图很复杂,输出GraphViz 规范并将结果呈现为可浏览图会相当简单。

【讨论】:

  • 这种方法对我来说不够精确,因为它也能找到sampleX.xml,尽管sampleX.xml 不包含在sample1.xml 中。
  • 您是要分析 single XML 文件的依赖关系,还是要弄清楚 all 的 XML 文件是如何相关的?我假设是后者。
  • 我要分析大约 300 个顶级文档的依赖关系,文档总数约为 2000 个,其中许多可能未使用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多