2012-02-04 87 views
1

是否有XSL 1.0的方式来提XPath表达式如下,以获取节点的值 “a”命名空间包含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

如果更名为'/根/ A'为'/根/ b',你怎么能改变你的xsl在一个地方,以便更早的xpath表达式也工作? – choroba 2012-02-04 08:50:29

回答

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