Xpointer: возможно ли выбрать пустой набор узлов?

Вопрос

у меня есть XInclude который включает в себя набор узлов в результате указанного xpointer выражение атрибута.

Можно ли выбрать с помощью xpointer , пустой набор узлов, чтобы ничего не включать?


вопрос

Причина в том, что мой xincluded & xpointed узел мог существовать и не мог существовать; так что я получаю:

Ошибка XInclude: ошибка XPointer

в случае, если указанный узел не существует.


пример

Выражение что-то вроде:

    xmlns(ns=urn:my:namespace)
    xpointer(/ns:element1/*[ns:elementA | ns:elementB])

Я хотел бы изменить XPointer так, чтобы XInclude НЕ включало ничего (без сообщения об ошибке) в случае, если узел не найден.

Что-то вроде:

    xmlns(ns=urn:my:namespace)
    xpointer(/ns:element1/*[ns:elementA | ns:elementB | NOT_FOUND_NODES ])

Есть ли способ сделать это?

1 ответ

Вы пытались использовать инструкцию xi:fallback?

Например, если вы указали это

<xi:include href="somedoc.xml" xpointer="xmlns(ns=urn:my:namespace)xpointer(/ns:element1/*[ns:elementA | ns:elementB])" />

и ресурс xpointer не существует, вы получите ошибку ресурса (как указано в спецификации xpointer). Чтобы избежать этого, вы можете использовать запасной вариант:

<xi:include href="somedoc.xml" xpointer="xmlns(ns=urn:my:namespace)xpointer(/ns:element1/*[ns:elementA | ns:elementB])">
   <xi:fallback><NOT_FOUND_NODES/></xi:fallback>
</xi:include>

поэтому, когда xpointer попадет в ошибку ресурса, резервный будет вставлять элемент NOT_FOUND_NODES

Другие вопросы по тегам