2014-10-03 5 views
1

Я пытаюсь включить все дочерние элементы (разделы) элемента из a.xml в b.xml с помощью xi: include. Оба файла XML являются действительными файлами docbook 5.Включить дочерние элементы с помощью схемы xpointer element()

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() не верно?

ответ

3

Неправильное использование вами модели element().

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

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

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.

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')/*)"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^