命名空间包括xml - 直接xpath表达式

时间:2012-02-04 08:26:14

标签: xml xslt xpath

在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 :(得分: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