пространство имен включено xml - прямое выражение xpath - PullRequest
1 голос
/ 04 февраля 2012

Есть ли способ в xsl 1.0 упомянуть выражение xpath, как показано ниже, чтобы получить значение узла "a"

/Root/a - doesnt work

вместо

/Root/*[local-name() = 'a'] - this will work

Это мойXML-файл

<Root xmlns:ns="http://abc">
  <ns:a>value</ns:a>
</Root>

Причина, по которой я спрашиваю, в моем xslt во многих строках мы указали выражение xpath как /Root/a (или другие узлы), поскольку у файла xml ранее не было пространств имен.Однако в xml-файле теперь есть пространства имен, мы должны изменить его везде, используя *[local - name()].Вместо этого, есть ли способ изменить мой xsl в одном месте, чтобы более ранние выражения xpath также работали, даже с включенным пространством имен xml?

1 Ответ

0 голосов
/ 04 февраля 2012

Если вы используете XSLT 2.0, вы можете объявить xpath-default-namespace.В XSLT 1.0 лучше объявить префикс пространства имен и использовать его в выражениях XPath, чем использовать функцию local-name(), например:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://abc"/>

В XPath:

/Root/ns:a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...