我正在尝试从SOAP消息中获取值。我需要检索用户名和密码。
SOAP消息如下所示:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header></soap:Header>
<soap:Body>
<GetData xmlns="http://webservicedata.com/">
<oXmlElement>
<message>
<header>
<username>[email protected]</username>
<password>Test password</password>
</header>
</message>
</oXmlElement>
</GetData>
</soap:Body>
</soap:Envelope>
这是我的XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" exclude-result-prefixes="soap msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<NewDataSet>
<Header>
<username>
<xsl:value-of select="soap:Envelope/soap:Body/GetData/oXmlElement/message/header/username"/>
</username>
<password>
<xsl:value-of select="soap:Envelope/soap:Body/GetDate/oXmlElement/message/header/password"/>
</password>
</Header>
</NewDataSet>
</xsl:template>
</xsl:stylesheet>
以下是我删除后可以正常工作的预期结果 <GetData xmlns="http://webservicedata.com/">
<?xml version="1.0" encoding="UTF-8"?>
<NewDataSet>
<Header>
<Portfolio />
<username>[email protected]</username>
<password>testpassword</password>
</Header>
</NewDataSet>
在xmlns="http://webservicedata.com/"
上GetData
放的是和它的所有前缀的子元素到一个命名空间,所以你必须映射该命名空间的前缀,在你的样式表,并在你的XPath表达式使用前缀- XPath 1.0中没有前缀的名字总是指的元素没有命名空间。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsd="http://webservicedata.com/"
exclude-result-prefixes="soap msxsl wsd">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<NewDataSet>
<Header>
<username>
<xsl:value-of select="soap:Envelope/soap:Body/wsd:GetData/wsd:oXmlElement/wsd:message/wsd:header/wsd:username"/>
</username>
<!-- similar for password -->
</Header>
</NewDataSet>
</xsl:template>
</xsl:stylesheet>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句