1

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

一个.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() 方案的使用不正确吗?

4

2 回答 2

4

您对该element()方案的使用不正确。

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

这是一个有效的表达式:

element(TheChapter/1)

它将选择由TheChapterID 标识的元素的第一个子元素。element()使用该方案无法完成您想要的事情。


您可以使用该xpointer()方案:

xpointer(id('TheChapter')/*)

xpointer()方案从未成为 W3C 建议(它仍然只是一个草案),并且没有得到广泛实施。

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

于 2014-10-05T10:57:29.037 回答
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')/*)"/>
于 2014-10-09T09:03:38.317 回答