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