我的源XML具有带有“wd:”前缀的属性,如此
<wd:EMPLID>1234</wd:EMPLID>
<wd:First_Name>Jack</wd:First_Name>
当我编写XSLT时,我可以说
<xsl:value-of select="EMPLID"/>
而不是
<xsl:value-of select="wd:EMPLID"/>
目标是使代码更易于阅读。
答案 0 :(得分:2)
当我编写XSLT时,我可以说
<xsl:value-of select="EMPLID"/>
而不是
<xsl:value-of select="wd:EMPLID"/>
首先,重要的是要了解它不是重要的特定前缀,而是绑定前缀的名称空间URI。源文档和样式表可以使用不同的前缀来指定相同的名称空间URI。
第二,XPath,也就是XSLT,针对&#34;扩展名称&#34;评估名称测试,它们是(名称空间URI,名称)对,所以你做以某种方式指定每个名称所属的名称空间(如果有)。对XSLT元素属性中的XPath表达式有效的名称空间前缀绑定是该XSLT元素的作用域。但是,适用于该范围的任何默认命名空间都不会应用于此类XPath表达式。
如果你正在使用XSLT 1.0,那就差不多了。该语言没有提供指定非空默认命名空间的机制,在该命名空间中可以解释出现在XPath表达式中的未加前缀的名称。可能你的实现有一个扩展提供,但依赖这样的扩展是不可移植的。
但是,如果您正在使用XSLT 2.0或更高版本,那么您可以根据另一个答案给出具体的规定。携带XPath表达式的元素的xpath-default-namespace
属性(如果有)或最内层包含元素的元素(如果有)指定用于解释表达式中未加前缀的名称的名称空间URI。您可以在样式表级别,xsl:value-of
元素或之间的任何元素上指定。
答案 1 :(得分:0)
是的,属性xpath-default-namespace
可用于此目的。
请参阅:https://www.w3.org/TR/xslt20/#unprefixed-qnames
属性[xsl:] xpath-default-namespace(请参阅3.5标准属性)可用于样式表中的元素,以定义将用于XPath表达式中未加前缀的元素名称或类型名称的名称空间< / p>
例如,它可以在stylesheet
元素上使用:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://www.example.com/wd"
<!-- ^ replace with namespace uri-->
>