【发布时间】:2014-11-13 12:19:31
【问题描述】:
我有一个 XML 文件,如下所示:
<area1>
<settings>
<setting name="to_include">value</setting>
</settings>
</area1>
<area2>
<settings>
<setting name="where_to_include">?????</setting>
</settings>
</area2>
我想将设置节点 “to_include” 的值包含为设置节点 “where_to_include” 的值。 我怎么能以纯 XML 的方式做到这一点? X包括?指针? XPath?联通?其他?
我希望我能做这样的事情:
<area2>
<settings>
<setting name="where_to_include">
<xi:include href="SAMEFILE" xpointer="xpointer(/areas/area1/settings/setting[@name='debug'])">
<xi:fallback>FALLBACK VALUE</xi:fallback>
</setting>
</settings>
</area2>
但是使用 XInclude 我无法在解析文档时引用文档本身。
【问题讨论】:
-
显然,您还没有花时间熟悉这些 XML 技术。您需要什么取决于您使用的语言/环境。例如,有针对 Python(例如 lxml)、Java、PHP 的解决方案;有 XQuery 和 XSLT。在这里提问之前先看看 XSLT 教程怎么样?
-
很遗憾,我没有时间熟悉所有的 XML 技术,但是当有新的需求出现时,我会尝试一步一步来。我已经在我的语言级别(PHP)有一个解决方案,但我不允许对其进行更改。原因是我想知道是否有一个纯 XML 解决方案而不改变外部环境。 (我还在我的问题中添加了一个 XPointer 示例)
-
抱歉,我稍微误解了你的问题。您确定您的 PHP 解决方案支持 XPointer 和 XLink?
-
是的,xincludes 指向同一个文件是不可能的。编写一个小型 XSLT 转换来执行此操作怎么样?
-
我的 PHP 解决方案依赖于 libxml 并且所有 XML 功能都由它管理。所以是的,所有的解析都正确执行并且它支持 XPointer(s)(过去已经使用过)。
标签: xml xpath include xinclude xpointer