2012-08-05 5 views
0

XML 파일을 XSLT를 사용하여 다른 XML로 전송하려고합니다. 나는 XML 파일이 순수 트리 구조화 된 문서가 아니기 때문에 변환을 원한다.XSL을 사용한 XML 변환

은 여기 내 파일 전에 :

<uglyStartTag></uglyStartTag> 
    <name>content</name> 
<uglyEndTag></uglyEndTag> 

또는

<uglyStartTag/> 
    <name>content</name> 
<uglyEndTag/> 

여기 내 파일의 후 :

<beautyTag> 
    <name>content</name> 
</beautyTag> 

내가 어떻게 할 수 있습니까? XSLT에 익숙하지 않아 어떤 조언을해도 감사 할 것입니다.

+1

당신이 가지고있는 것은 잘 구성된 XML이 아니라는 것을 알고 계십니까? 이것은 xslt가 전혀 작동하지 않을 수도 있습니다. –

+1

'XML 파일은 순수 트리 구조가 아닙니다 .' 그것은 모순이 아닙니까? – Kowser

+0

XML 파일이 XML 표준으로 올바르게 구성되어 있지만 하나의 데이터 유형을 저장하기 위해 두 개의 태그가 있습니다 :'uglyStartTag'을 열고'uglyEndTag'를 끝내십시오. 'beautyTag'와 같은 하나의 태그가 있어야합니다 – bontade

답변

1

이 변환 :

<t> 
    <uglyStartTag /> 
    <name>dgsdgsdgsdg</name> 
    <uglyEndTag /> 
</t> 

이 원하는 정확한 결과를 생성합니다 : (코멘트에서 OP에서 제공)이 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()[preceding-sibling::uglyStartTag 
      and 
       following-sibling::uglyEndTag 
       ][1]"> 
     <beautyTag> 
     <xsl:copy-of select= 
     "../node()[preceding-sibling::uglyStartTag 
        and 
        following-sibling::uglyEndTag 
        ] 
     "/> 
     </beautyTag> 
    </xsl:template> 
</xsl:stylesheet> 

<beautyTag> 
    <name>dgsdgsdgsdg</name> 
</beautyTag> 
+0

당신은 내가 \t 'dgsdgsdgsdg' \t \t 와 그 XSLT 사용을 시도하고 때 문제가 있는지 말해 수 없습니다. 출력은' dgsdgsdgsdg'입니다. ' dgsdgsdgsdg ' – bontade

+1

@bontade를 갖고 싶습니다. 질문에 그러한 요구 사항을 지정하지 않았습니다. "content"는 문자열입니다. 제발, 수정하고 질문을 업데이 트하십시오. 나는 곧 나의 대답을 업데이트 할 것이다. –

+1

@bontade, 나는이 대답을 편집했고 이제는 원하는 방식으로 새 XML 문서를 처리합니다. –

관련 문제