2012-06-09 5 views
-1

XSLT를 사용하여 HTML 콘텐츠를 XML 구조로 긁어 내려고 노력 중입니다. XALAN (CLI)을 사용하여 HTML에 대해 내 xslt를 테스트했으며 결과에 만족했을 때 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에만 템플릿은 다음과 같습니다 자바 transofmer를 사용

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

결과 :의 Xalan을 사용

<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> 

결과 (CLI)

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

td의 값을 잡으려고하는 모든 조합을 시도했지만 실패했습니다. 여기서 무엇이 누락 되었습니까?

+1

1. 코드로 제공 한 것은 "스타일 시트"가 아닙니다. 단지 하나의 템플릿 일뿐입니다. 2. 코드 또는 XML 문서에 'usage_channel'이 없습니다. 즉, transformatin을 수행 한 결과를 얻었다는 진술은 사실이 아닙니다! 질문을 편집하여 의미 있고 모순이 없도록하십시오. 내 생각 엔 두 가지 경우에서 (XML 문서, XSLT 코드)의 다양한 조합을 사용했기 때문에 두 가지 결과가 왜 다른지 설명합니다. –

+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에게 감사드립니다.

관련 문제