Включить дочерние элементы со схемой 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')/*)"/>