Пространство имен Saxon Xpath - PullRequest
       8

Пространство имен Saxon Xpath

2 голосов
/ 09 декабря 2010

С учетом следующего xml:

<Document xmlns="urn:company.com:catalog.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <book>
        <author>Wells</author>
    </book>
</Document>

С Xerces работает следующий запрос xpath:

//urn:company.com:catalog.01:author

Когда я использую Saxon (v 8.7), я получаю StaticError с сообщением «Invalid QName local part {company.com:catalog.... отпуска».

Как должен выглядеть запрос Xpath, чтобы получить значение author?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2010

Вы не опубликовали свой XSL-файл.Я недавно прошел через это, и решение состояло в том, чтобы убедиться, что в файле xsl есть строка вроде:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="urn:company.com:catalog.01">

Тогда ваши ссылки на элементы в файле xml имеют префикс "c:":

//c:author
0 голосов
/ 09 декабря 2010

Xerces не должен разрешать выражение XPath вроде

//urn:company.com:catalog.01:author 

XPath совместим с именами XML, поэтому : (двоеточие) в QName разделяет префиксную часть от части локального имени QName.

В XPath нет синтаксиса для использования полного расширенного QName в тесте имени:

Вы можете использовать

//*[local-name()='author'][namespace-uri()='urn:company.com:catalog.01']
...