Включить дочерние элементы со схемой xpointer element()

Я пытаюсь включить все дочерние элементы (разделы) элемента из a.xml в b.xml с помощью xi:include. Оба 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

Мое использование элемента () неверно?

2 ответа

Ваше использование element() схема не верная.

  • Первая часть выражения, идентифицирующего элемент по его идентификатору, не должна начинаться с косой черты.
  • Подстановочные знаки (*) не может быть использован. "Дочерняя последовательность" может содержать только косые черты и цифры.

Это правильное выражение:

element(TheChapter/1)

Он выберет первого потомка элемента, идентифицируемого TheChapter Я БЫ. То, что вы хотите, не может быть сделано с помощью element() схема.


Вы могли бы использовать xpointer() схема:

xpointer(id('TheChapter')/*)

xpointer() Схема никогда не стала рекомендацией W3C (это все еще только черновик) и не получила широкого распространения.

XMLmind XML Editor поддерживает подмножество xpointer(), Вот список рассылки с более подробной информацией: http://permalink.gmane.org/gmane.editors.xxe.general/10220.

Следующее использование отлично работает:

<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')/*)"/>
Другие вопросы по тегам