我有大约500个xml文档,每个文档大约20000行。它们相互包含,全部或部分(由xpointer指定)
我必须弄清楚它们是如何联系在一起的。是否有可能在调用xinclude后解析(并打印)给定文件的包含层次结构?调用历史是否存储在结果dom中的某个位置,是否可以从样式表访问?
对于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/创建结果:
记录每个顶级包含元素的包含历史在包含历史扩展属性中。包含历史属性是表示属性的元素信息列表
我的问题:
- libxml2是否遵循规范并存储包含历史?
- 通过哪个API调用(最好使用xslt)我可以访问包含历史?
- 还是我误解了规范?
感谢任何提示:-)
oerkelchen
如果您熟悉XSLT,那么这是一种完全可以接受的方法。我想我会这样做:
- 使用您的技术在单个XML文档 中打印所有
- 使用命令行FOR递归地处理所有目录中的所有XML文档。在Windows上,
FOR
可以很容易地做到这一点。Linux上是find
<xi:include>
标记的值如果依赖关系图很复杂,输出GraphViz规范并将结果呈现为可浏览的图将是相当简单的。