2012-06-30 1 views
1

Я использую xsl 1.0. Мне нужно получить uri пространства имен из префикса.Получение пространства имен uri путем предоставления префикса в xslt

<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> 

Я хочу, чтобы получить URI пространства имен для префикса a1 является 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> 

Но я не получаю пространство имен.

ответ

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 
+0

благодарит Dimitre, это работает для меня :) –

+0

@RrK: Я рад, что мой ответ решил проблему. Не могли бы вы, * принять * этот ответ (нажав галочку рядом с ответом)? –