我正在嘗試使用XSLT處理XML文件,以生成一個列表或表(或最終)帶有一些值的SQL INSERT命令。我一直在使用w3schools http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog的例子。如何使用XSLT處理名稱空間XML文檔?
我的XML是非常簡單的,我需要提取只是名字和酒店的速度:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getHotelsResponse xmlns="http://hotel.booking.vbooking.com">
<getHotelsReturn>
<address>
<number>589-591</number>
<postcode>08014</postcode>
<region>Catalonia</region>
<street>Carrer Vermell</street>
<town>Barcelona</town>
</address>
<name>Downtown Hotel</name>
<rate>235.0</rate>
</getHotelsReturn>
</getHotelsResponse>
</soapenv:Body>
</soapenv:Envelope>
我可以從W3Schools的建立最好的XSLT是這一個:
<?xml version="1.0" encoding="utf-8"?>
<!-- Edited by XMLSpyΠ-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/soapenv:Envelope/soapenv:Body/getHotelsResponse">
<html>
<body>
<h2>Hotels in Barcelona</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Hotel name</th>
<th>Rate ($/night)</th>
</tr>
<xsl:for-each select="getHotelsReturn">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="rate"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
這應該會產生與我在w3schools中的例子類似的結果,但它會回到空白狀態。
任何人都可以解釋一下嗎?謝謝。
請注意輸入的元素上的默認名稱空間綁定。您需要在XSLT中明確指出 - 爲該URI設置前綴並在匹配表達式中使用前綴。 –
keshlam
您可以請更具體一些,我對xslt很陌生,我試圖讓我的腦袋圍繞命名空間 – Ariestar
如果別人不這樣做,我會盡量抽出時間在今天晚些時候寫出正確的答案。 – keshlam