我正在尝试使用xslt将soap响应转换为xml,但我只获得空输出。 请任何人帮助我。
我的肥皂反应是
<Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Body
xmlns="http://schemas.xmlsoap.org/soap/envelope">
<OTA_HotelAvailRS TransactionIdentifier="12345" EchoToken="12345" Target="Test" TimeStamp="2008-03-18T10:46:53.393" Version="6.001">
<HotelImages>
<ImagePath>http://reznextlive.blob.core.windows.net/custcode-106/63710.jpg</ImagePath>
<ImagePath>http://reznextlive.blob.core.windows.net/custcode-106/63711.jpg</ImagePath>
<ImagePath>http://reznextlive.blob.core.windows.net/custcode-106/63712.jpg</ImagePath>
</HotelImages>
</OTA_HotelAvailRS>
</Body>
</Envelope>
我的XSLT IS
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output method="xml" omit-xml-declaration="no" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<images>
<xsl:value-of select="Envelope/Body/OTA_HotelAvailRS/HotelImages/ImagePath"/>
</images>
</xsl:template>
</xsl:stylesheet>
我的输出就像
<?xml version="1.0" encoding="utf-8"?>
<images xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>
答案 0 :(得分:2)
希望这有帮助,
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope"
exclude-result-prefixes="xsl xsi env xsd">
<xsl:output method="xml" omit-xml-declaration="no" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<root>
<xsl:for-each select="Envelope/env:Body/env:OTA_HotelAvailRS/env:HotelImages/env:ImagePath">
<images>
<xsl:value-of select="current()"/>
</images>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
您必须在xslt中指定节点在源xml中所属的命名空间,以便在xslt中访问该节点
答案 1 :(得分:2)
您的样式表很接近,但在<Body>
标记处有一个xmlns
默认名称空间声明,适用于该节点和所有子项。看起来您可能已经尝试过,因为在样式表中声明了soap
前缀。不幸的是,样式表中的soap命名空间不正确;应该没有尾随/
。命名空间在词法上进行比较而非语义,因此两者不相等。
以下是一个示例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<xsl:output method="xml" omit-xml-declaration="no" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<images>
<xsl:for-each select="Envelope/soap:Body/soap:OTA_HotelAvailRS/soap:HotelImages/soap:ImagePath">
<xsl:value-of select="." />,
</xsl:for-each>
</images>
</xsl:template>
</xsl:stylesheet>
您在样式表中获得的输出将仅是第一张图片。我在此处添加了xsl:for-each
作为示例。