2012-02-04 42 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