使用xpointer element()方案包含子元素

时间:2014-10-03 12:14:36

标签: xml docbook docbook-5 xpointer

我试图将a.xml中元素的所有子元素(部分)包含到带有xi:include的b.xml中。这两个XML文件都是有效的docbook 5文件。

A.XML

<chapter xml:id="TheChapter">
    <section>
        <title>section 1</title>
    </section>
    <section>
        <title>section 2</title>
    </section>
    <section>
        <title>section 3</title>
    </section>
</chapter>

B.XML

<section>
      <xi:include href="a.xml" xpointer="element(/TheChapter/*)"/>
</section>

我正在使用报告错误的XMLMind。

cannot parse inclusion directive: cannot parse XPointer "element(/TheChapter/*)": "/TheChapter/*", XPointer element() scheme syntax error

我对element()方案的使用不正确吗?

2 个答案:

答案 0 :(得分:3)

您对element()计划的使用不正确。

  • 通过其ID标识元素的表达式的第一部分不应以正斜杠开头。
  • 不能使用通配符(*)。 “子序列”只能包含正斜杠和数字。

这是一个有效的表达式:

element(TheChapter/1)

它将选择由TheChapter ID标识的元素的第一个子元素。使用element()方案无法完成您想要的任务。


您可以使用xpointer()计划:

xpointer(id('TheChapter')/*)

xpointer()计划从未成为W3C推荐(它仍然只是一个草案),并没有得到广泛实施。

XMLmind XML Editor确实支持xpointer()的子集。这是一个邮件列表帖子,其中包含更多详细信息:http://permalink.gmane.org/gmane.editors.xxe.general/10220

答案 1 :(得分:0)

以下用法正常:

<xi:include href="a.xml" xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('TheChapter')/db:section)"/>

<xi:include href="a.xml" xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('TheChapter')/*)"/>