2012-06-09 4 views
-1

Я пытаюсь использовать XSLT для очистки содержимого html в структуре xml, я проверил свой xslt на html с помощью XALAN (CLI), и когда я был доволен результатами, я взял xslt и использовал его из java-кода с помощью трансформатора (javax.xml.transform.TransformerFactory), ниже приведены значения тестирования, похожие на реальные коды стилей &.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 (АОН):

<?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 нет «use_channel», это означает, что утверждение, что вы получили результат, выполняющий преобразование, неверно! Пожалуйста, отредактируйте вопрос и сделайте его осмысленным и непротиворечивым. Я предполагаю, что вы использовали разные комбинации (XML-документ, XSLT-код) в двух случаях, и это объясняет, почему вы получили два разных результата. –

+0

Спасибо за комментарий (я отредактировал значения). На самом деле вышеуказанные значения - это просто фиктивные значения, которые имитируют мой реальный случай. – user1446584

+1

Если это «фиктивные значения», значит ли это, что вы никогда не выполняли предоставленное преобразование на предоставленном XML-документе в обоих описанных случаях? Если да, то как вы могли бы указать, каков фактический результат в каждом случае? –

ответ

0

Я узнал, что данные HMTL, используемые трансформатором, немного отличаются от исходного, из-за использования HTMLCleaner, поэтому на основе этой проблемы большинство моих запросов выбора XSLT больше недействительны. Я должен был распечатать 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 за ваши комментарии!

Смежные вопросы