我不确定为什么这不起作用。
这是我的xml:
<s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<LoginBodyResponse xmlns="http://tempuri.org">
<LoginBodyResult>somettext</LoginBodyResult>
</LoginBodyResponse>
</s:Body>
这是我当前的xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var"
exclude-result-prefixes="msxsl var s0"
version="1.0"
xmlns:ns0="http://tempuri.org"
xmlns:s0="http://tempuri.org">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="LoginBodyResponse">
<ns0:LoginBodyReponse>
<xsl:if test="LoginBodyResult">
<LoginBodyResult>
<xsl:value-of select="LoginBodyResult/text()" />
</LoginBodyResult>
</xsl:if>
</ns0:LoginBodyReponse>
</xsl:template>
</xsl:stylesheet>
我无法进入此模板。我真的不确定为什么它不会进入LoginBodyResponse节点。我假设我犯了一个愚蠢的小错误,但无法弄清楚它的问题。我还将模板匹配设置为* /,当我这样做时,它永远不会在xsl:if部分找到LoginBodyResult。
我基本上在寻找这个输出:
<ns0:LoginBodyReponse xmlns:ns0="http://tempuri.org">
<LoginBodyResult>somettest</LoginBodyResult>
</ns0:LoginBodyReponse>
答案 0 :(得分:3)
这是因为LoginBodyResponse
位于默认命名空间http://tempuri.org
中。您将需要在xpath中为元素添加前缀。
未经测试的例子:
<xsl:template match="ns0:LoginBodyResponse">
<ns0:LoginBodyReponse>
<xsl:if test="ns0:LoginBodyResult">
<LoginBodyResult>
<xsl:value-of select="ns0:LoginBodyResult" />
</LoginBodyResult>
</xsl:if>
</ns0:LoginBodyReponse>
</xsl:template>
此外,如果您删除重复的命名空间声明xmlns:s0="http://tempuri.org"
(并从s0
删除exclude-prefix-results
),您应该获得所需的输出。