2012-02-04 3 views
1

Есть ли способ в XSL 1.0 упомянуть выражение XPath, как показано ниже, чтобы получить значение узла «а»пространства имен включены XML - прямое выражение XPath

/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?

+0

Если переименовали '/ Root/a' для'/Root/b', как вы можете изменить xsl в одном месте, чтобы более ранние выражения xpath также работали? – choroba

ответ

0

Если вы используете 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 
Смежные вопросы