2012-06-09 35 views
-1

我試圖使用XSLT將html內容轉換爲xml結構,我使用XALAN(CLI)測試了xslt對html的反應,當我對結果滿意時, xslt文件並使用變量(javax.xml.transform.TransformerFactory)從java代碼中使用它,下面是與實際代碼&樣式表類似的測試值。xslt與xalan cli協同工作,但不是來自java代碼

我的HTML樣本數據:

<html><body class='home'> 
     <div >Welcome !!</div> 
    <table border='0'><tr><td colspan='2'>asdas</td></tr> 
     <tr><td class='footer' colspan='2' align='center'>Disclaimer: The information provided below is for informative purpose only and it is not a legal document.</td></tr> 
     <tr><td colspan='2'>test;</td></tr> 
    <tr><td class='Home' width='50%' aligh='center'> number:</td><td class='Home' width='50%' aligh='center'>515120</td></tr><tr><td class='Home' width='50%' aligh='center'>Connection :</td><td class='Home' width='50%' aligh='center'>123.23</td></tr><tr><td class='Home'>period (month/year):</td><td class='Home'>04/2012</td></tr><tr><td class='Home'>Date:</td><td class='Home'>APRIL  08,2012, 21:35</td></tr> </table> 
    </body> 
    </html> 

我XSL唯一模板是:

<xsl:template match="*"> 
<usage_channel> 
<head><xsl:value-of select="//div/text()" /></head> 
<body><xsl:value-of select="//td/font/text()" /></body> 
<footer><xsl:value-of select="body/table/tr[contains(td,'number')]/td[1]/text()" /></footer> 
</usage_channel> 
</xsl:template> 

結果使用XALAN(CLI):

<?xml version="1.0" encoding="UTF-8"?><usage_channel><head>Welcome !!</head><body/><footer> number:</footer></usage_channel> 

結果使用Java transofmer:

<?xml version="1.0" encoding="UTF-8"?> 
<usage_channel> 
    <head>Welcome !!</head> 
    <body/> 
    <footer/> 
</usage_channel> 

我嘗試了所有的組合,希望能夠捕捉td中的值,但是我失敗了,這裏錯過了什麼?

+1

1.您提供的代碼不是「樣式表」 - 它只是一個模板。 2.代碼或XML文檔中不存在'usage_channel' - 這意味着您得到執行轉換結果的語句 - 並不正確!請編輯該問題並使其有意義且不矛盾。我的猜測是你在這兩種情況下使用了不同的(XML-document,XSLT-code)組合,這就解釋了你爲什麼得到兩個不同的結果。 –

+0

感謝您的評論(我編輯了這些值),其實上面的值只是模擬我真實情況的虛擬值。 – user1446584

+1

如果這些是「虛擬值」,這是否意味着您在所描述的兩種情況下從未在所提供的XML文檔上執行提供的轉換?如果是這樣,你怎麼能說出每種情況下的實際結果? –

回答

0

我發現由於HTMLCleaner的使用,轉換器使用的HMTL數據與原始數據略有不同,所以基於這個問題,我的大部分XSLT select查詢都不再有效。我不得不打印出來的HTML和發現的問題:

修改HTML後,其HTMLCleaner清洗:

<html> 
<head></head> 
<body class="home"> 
    <div>Welcome !! 
    <center> 
    <table border="0"> 
    <tbody> 
     <tr><td colspan="2">asdas</td></tr> 
     <tr><td class="footer" colspan="2" align="center">Disclaimer: The information provided below is for informative purpose only and it is not a legal document.</td></tr> 
     <tr><td colspan="2">test;</td></tr> 
     <tr><td class="Home" width="50%" aligh="center">number:</td><td class="Home" width="50%" aligh="center">515120</td></tr> 
     <tr><td class="Home" width="50%" aligh="center">Connection :</td><td class="Home" width="50%" aligh="center">123.23</td></tr> 
     <tr><td class="Home">period (month/year):</td><td class="Home">04/2012</td></tr> 
     <tr><td class="Home">Date:</td><td class="Home">APRIL  08,2012, 21:35</td></tr>  
    </tbody> 
    </table> 
    </center> 
    </div> 
</body> 
</html> 

公告實施新標籤<center>,這打破了我大部分的查詢是取決於路徑上body/table/tr/td,將它們更改爲body/div/center/table/tr/td解決了問題。感謝Dimitre的評論!

相關問題