我已閱讀了關於此主題的其他幾個問題,根據我在網站上其他地方閱讀的答案,我認爲我正確地做了這件事,但它仍然沒有完成,工作。XSLT和默認命名空間的問題
我有一個XHTML文件,我已經通過JTidy運行並運行XPath以從該XHTML中選擇單個表節點。這一切工作正常,和XPath能夠選擇表就好了,它返回的XML下面的代碼片段:
<table xmlns="http://www.w3.org/1999/xhtml" align="left" border="1" cellpadding="3" cellspacing="3" id="ctl07_tblMain" rules="rows" style="border-color:Green; border-style:solid; border-width:1px;" summary="Table is for layout purpose only">
<tr>
<th class="GridViewHeader" colspan="19" style="font-weight:bold; text-align:center">Select an arrival date
to continue.</th>
</tr>
<tr class="altCampArea">
<td align="center" width="400">Site Type</td>
<td align="center"> Pet </td>
<td align="center">Electric</td>
<td align="center">Water</td>
<td align="center">Sewer</td>
<td align="center" title="Friday, 02/07/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/7/2014","SearchCriteria.aspx"); return false;">02/07</a>
</td>
<td align="center" title="Saturday, 02/08/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/8/2014","SearchCriteria.aspx"); return false;">02/08</a>
</td>
<td align="center" title="Sunday, 02/09/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/9/2014","SearchCriteria.aspx"); return false;">02/09</a>
</td>
<td align="center" title="Monday, 02/10/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/10/2014","SearchCriteria.aspx"); return false;">02/10</a>
</td>
<td align="center" title="Tuesday, 02/11/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/11/2014","SearchCriteria.aspx"); return false;">02/11</a>
</td>
<td align="center" title="Wednesday, 02/12/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/12/2014","SearchCriteria.aspx"); return false;">02/12</a>
</td>
<td align="center" title="Thursday, 02/13/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/13/2014","SearchCriteria.aspx"); return false;">02/13</a>
</td>
<td align="center" title="Friday, 02/14/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/14/2014","SearchCriteria.aspx"); return false;">02/14</a>
</td>
<td align="center" title="Saturday, 02/15/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/15/2014","SearchCriteria.aspx"); return false;">02/15</a>
</td>
<td align="center" title="Sunday, 02/16/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/16/2014","SearchCriteria.aspx"); return false;">02/16</a>
</td>
<td align="center" title="Monday, 02/17/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/17/2014","SearchCriteria.aspx"); return false;">02/17</a>
</td>
<td align="center" title="Tuesday, 02/18/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/18/2014","SearchCriteria.aspx"); return false;">02/18</a>
</td>
<td align="center" title="Wednesday, 02/19/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/19/2014","SearchCriteria.aspx"); return false;">02/19</a>
</td>
<td align="center" title="Thursday, 02/20/2014" width="20">
<a href="#" onclick="javascript:closeAndRedirect("2/20/2014","SearchCriteria.aspx"); return false;">02/20</a>
</td>
</tr>
<tr>
<td align="left" width="400">CEDAR GROVE-WATER ONLY CAMPSITE</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
<td align="center">11</td>
</tr>
<tr class="altCampArea">
<td align="left" width="400">LARGE TRAILER AREA-ELECTRIC &
WATER CAMPSITE 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">12</td>
<td align="center">12</td>
<td align="center">12</td>
<td align="center">12</td>
<td align="center">12</td>
<td align="center">12</td>
<td align="center">11</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">10</td>
<td align="center">13</td>
<td align="center">13</td>
<td align="center">13</td>
<td align="center">13</td>
</tr>
<tr>
<td align="left" width="400">LARGE TRAILER
AREA-SEWER,ELECT&WATER HOST 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
</tr>
<tr class="altCampArea">
<td align="left" width="400">OAK GROVE-SEWER,ELECT&WATER
30AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">2</td>
<td align="center">3</td>
<td align="center">3</td>
<td align="center">3</td>
<td align="center">3</td>
<td align="center">3</td>
<td align="center">3</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">2</td>
<td align="center">2</td>
<td align="center">2</td>
<td align="center">3</td>
</tr>
<tr>
<td align="left" width="400">PECAN GROVE-ELECTRIC & WATER
CAMPSITE 20FT 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">8</td>
<td align="center">8</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
</tr>
<tr class="altCampArea">
<td align="left" width="400">PECAN GROVE-ELECTRIC & WATER
CAMPSITE 25FT 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
<td align="center">10</td>
</tr>
<tr>
<td align="left" width="400">PECAN GROVE-ELECTRIC & WATER TENT
ONLY 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
</tr>
<tr class="altCampArea">
<td align="left" width="400">PECAN GROVE-SEWER,ELECT&WATER HOST
50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
</tr>
<tr>
<td align="left" width="400">WAGON CIRCLE-GROUP TRAILER AREA
50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">No</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
<td align="center">35</td>
</tr>
<tr class="altCampArea">
<td align="left" width="400">WAGON CIRCLE-SEWER,ELECT&WATER
PREMIUM 50AMP</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">Yes</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0</td>
</tr>
</table>
然後我嘗試過程中使用此XSLT是:
<xslt:stylesheet xmlns:xslt="http://www.w3.org/1999/XSL/Transform" xmlns:csw-xform="http://www.compositesw.com/2003/xform" xmlns:ns1="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xslt:template match="/">
<xslt:variable name="_value"/>
<xslt:element name="results">
<xslt:for-each select="ns1:table">
<xslt:for-each select="ns1:tr">
<xslt:for-each select="ns1:td">
<xslt:variable name="_value" select="normalize-space(.)"/>
<xslt:element name="result">
<xslt:element name="value">
<xslt:value-of select="$_value"/>
</xslt:element>
</xslt:element>
</xslt:for-each>
</xslt:for-each>
</xslt:for-each>
</xslt:element>
</xslt:template>
</xslt:stylesheet>
但得到的XSLT的輸出就是:
<results/>
我懷疑這是一個命名空間的問題,但據我可以告訴命名空間被在XSLT正確處理。輸入XML中的默認名稱空間在XSLT中定義爲「ns1」,並在該XSLT中的每個XPath表達式中使用。所以我不知道我錯過了什麼。
編輯2014-02-09:原來是我用來運行XSLT的軟件平臺中的一個錯誤。上面粘貼的XML片段實際上只是一個大文檔中的表格。爲了獲取表格,我首先調用XPATH,如下所示:
DECLARE myXML LONGVARCHAR;
DECLARE myOutXML XML;
SET outXml = XPATH(myOutXML, '//*[@id=''ctl07_tblMain'']');
'outXml'被送入XSLT的位置。我不得不將其更改爲這使其工作:
SET myOutXML = CAST(XPATH(myOutXML, '//*[@id=''ctl07_tblMain'']') AS LONGVARCHAR);
SET outXml = myOutXML;
出於某種原因,從鑄造到XML的LONGVARCHAR XPATH的結果,然後返回回作爲XML解決了這一問題。
作爲Lingamurthy CS節目,你的代碼看起來不錯。所以也許我們需要看看你是如何運行它的。 –
是的,這是我運行XSLT的軟件平臺中的一個錯誤。上面粘貼的XML片段實際上只是一個大文檔中的表格。爲了只抓住表格,我首先調用XPATH,如下所示: SET outXml = XPATH(myOutXML,'// * [@ id =''ctl07_tblMain'''''; – irwinr