在xpath表达式中不使用命名空间

时间:2016-11-15 14:26:01

标签: xml xslt xpath namespaces

在XSLT样式表中,我设置<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://my.example.com/" > 以匹配样式表处理的输入文档。输出文档位于no名称空间中。

例如,xsl:stylesheet元素指定了xpath-default-namespace:

<xsl:variable name="vCustomElement" as="element()">
   <some_element>
       <!-- element content -->
   </some_element>
</xsl:variable>

<xsl:apply-templates select="$vCustomElement" mode="something" />

.
.

<xsl:template match="*:some_element" mode="something">
    ...
    <xsl:sequence select="." />
    ...
</xsl:template>

在转换中,我构建的元素没有命名空间,我也需要匹配这些元素。现在,我使用如下构造:

class User:
    def __init__(self)
        self.name = ''

class Patient(User):
    def __init__(self):
        self.data = []

这很有用,但我很好奇,有没有办法在xpath表达式中指定没有命名空间作为前缀?以上只适用,因为它匹配所有的名称,包括no namespace

2 个答案:

答案 0 :(得分:2)

在XSLT / XPath 3.0中,无论xpath-default-namespace的当前设置如何,都可以编写match="Q{}local"来匹配no-namespace元素。

除了重置xpath-default-namespace之外,没有办法在2.0中执行此操作,您可以对具有本地范围的任何元素执行此操作。

答案 1 :(得分:0)

以下是有效的,但是,如果有人在匹配表达式中指定no namesapce作为前缀,我仍然很好奇

<xsl:template match="some_element" mode="something" xpath-default-expression="">
    ...
    <xsl:sequence select="." />
    ...
</xsl:template>