通过在xslt中给出前缀来获取名称空间uri

时间:2012-06-30 20:14:56

标签: xslt-1.0

我正在使用xsl 1.0。我需要从前缀获取名称空间uri。

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:a1="http://example.com/arthemetic/integers/a1">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<a1:add>
</a1:add>
</soapenv:Body>
</soapenv:Envelope>

我想获得前缀a1的名称空间uri是http://example.com/arthemetic/integers/v1
 这是我正在尝试的代码,

<xsl:template match="/">
<xsl:variable name="operationName">
<xsl:value-of
select="name(/*[local-name()='Envelope']/*[local-name()='Body']/*[1])"></xsl:value-of>
</xsl:variable>
<xsl:variable name="prefix">
<xsl:value-of select="substring-before($operationName, ':')"></xsl:value-of>
</xsl:variable>
<xsl:variable name="ns-node"
select="namespace::node()[.= $prefix]" />
dfadsfdfadsf
<xsl:value-of select="$ns-node" />
</xsl:template>
</xsl:stylesheet>

但我没有收到命名空间。

1 个答案:

答案 0 :(得分:0)

使用

<xsl:value-of select="/*/namespace::a1"/>

这是一个完整的转型

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
   <xsl:value-of select="/*/namespace::a1"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:a1="http://abc.com/arthemetic/integers/a1">
    <soapenv:Header></soapenv:Header>
    <soapenv:Body>
        <a1:add></a1:add>
    </soapenv:Body>
</soapenv:Envelope>

产生了想要的正确结果

http://abc.com/arthemetic/integers/a1