我是使用XSL的新手......我有一个SOAP响应: -
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<insertDataResponse xmlns="http://services.test.com/schema/MainData/V1">
<Response>Done !!!</Response>
<Id>0</Id>
<Age>0</Age>
</insertDataResponse>
</soap:Body>
</soap:Envelope>
我正在使用以下XSL来转换响应: -
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="/">
<soap:Envelope>
<soap:Body>
<insertDataResponse xmlns="http://services.test.com/schema/MainData/V1">
<Response>
<xsl:value-of select="Response" />
</Response>
<Id>
<xsl:value-of select="Id" />
</Id>
<Age>
<xsl:value-of select="Age" />
</Age>
</insertDataResponse>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
现在......当我尝试在SOAP请求上执行XSL转换时......我得到以下输出: -
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<insertDataResponse xmlns="http://services.test.com/schema/MainData/V1">
<Response />
<Id />
<Age />
</insertDataResponse>
</soap:Body>
</soap:Envelope>
我的属性没有任何价值......我做错了什么......我错过了什么......请帮忙......
答案 0 :(得分:1)
你在匹配/
的模板中,所以
<xsl:value-of select="Response" />
和类似的表达式在没有命名空间的情况下寻找名为Response
的根级元素,该元素不存在(文档元素名为Envelope
并且在http://schemas.xmlsoap.org/soap/envelope/
命名空间。)
您需要在样式表中使用前缀声明http://services.test.com/schema/MainData/V1
命名空间:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:md1="http://services.test.com/schema/MainData/V1"
exclude-result-prefixes="md1">
并修复你的xpath以匹配结构:
<xsl:value-of select="soap:Envelope/soap:Body/md1:insertDataResponse/md1:Response"/>
然而,鉴于您的输入和输出有多么相似,您可能最好采用不同的方式构建事物,而是将样式表基于身份转换(本网站上的其他问题中有数百个示例) )。