2010-05-21 4 views
1

xslt (2.0)를 처음 사용하고 까다로운 문제에 약간의 문제가 있습니다. 기본적으로 나는 형식이 잘못된 HTML 파일 아래와 같이있다 :xslt와 잘못된 형식의 html을 함께 사용하면 문제가 발생합니다.

<html> 
    <body> 

    <p> text 1 </p> 
    <div> <p> text 2</p> </div> 
    <p> Here is a list 
     <ul> 
      <ol> 
       <li> ListItem1 </li> 
      <li> ListItem1 </li> 
     </ol> 
     <dl> 
      <li> dl item </li> 
      <li> dl item2 </li> 
     </dl> 
    </ul> 
    <div> 
    <p> I was here</p> 
    </div> 
    </p> 
</body> 
</html> 

그리고 멋지게 형식의 XML 파일에 넣어 노력하고 있어요. 내 xslt 파일에서 나는 반복적으로 p 또는 div의 모든 자식이 다른 p 또는 div의 것인지 확인하고 그냥 승격합니다. 다른 단락에서는 독립 단락으로 사용합니다. 이 아이디어를 확장하여 자식 목록이있는 p 또는 div가 제대로 표시되지만 자식 목록을 승격시키지 않도록합니다. 나는 데

문제는 내가 얻을 출력 XML은 "여기 목록입니다"너무 단락 태그에 있어야 다음

<?xml version="1.0" encoding="utf-8"?><html> 
    <body> 

    <p> text 1 </p> 
    <p> text 2</p> 
    Here is a list 
    <ul> 
     <ol> 
      <li> ListItem1 </li> 
      <li> ListItem1 </li> 
     </ol> 
     <dl> 
      <li> dl item </li> 
      <li> dl item2 </li> 
     </dl> 
    </ul> 

    <p> I was here</p> 



</body> 
</html> 

때문이다! 이 문제를 해결하기 위해 열심히 노력하고 있습니다 ... 모든 입력/링크를 크게 부탁드립니다.

+0

하지만, HTML Tidy는 추측에 귀찮게하지 않고도 이런 종류의 문제를 처리하는 훌륭한 일을합니다. XSLT 조언을 원한다면 코드의 관련 부분을 게시해야 할 것입니다. –

+0

좋은 질문 (+1). 짧지 만 완전한 해결책에 대한 내 대답을보십시오. :) –

답변

1

이 변환 : 제공된 XML 문서에 적용

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
    "div[descendant::div or descendant::p] 
    | 
    p[descendant::div or descendant::p] 
    "> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match= 
    "div[descendant::div or descendant::p]/text() 
    | 
    p[descendant::div or descendant::p]/text() 
    "> 
    <xsl:element name="{name(..)}" 
     namespace="{namespace-uri(..)}"> 
    <xsl:copy-of select="."/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

가 원하는 생산하고, 올바른 출력 :이 질문에 대한 답변하지 않습니다

<html> 
    <body> 
     <p> text 1 </p> 
     <p> text 2</p> 
     <p> Here is a list 

     </p> 
     <ul> 
     <ol> 
      <li> ListItem1 </li> 
      <li> ListItem1 </li> 
     </ol> 
     <dl> 
      <li> dl item </li> 
      <li> dl item2 </li> 
     </dl> 
     </ul> 
     <p> I was here</p> 
    </body> 
</html> 
+0

도와 주셔서 대단히 감사합니다! xslt를 아는 사람들을 찾는 것은 극히 어렵습니다. 건배 – Pharaon

관련 문제