2010-02-25 3 views
0

브라우저에서 빈 페이지를 얻지 못하도록 xsl에 대해 다음 xml을 실행하려고 할 때 완전히 멈추었습니다.xml을 다른 xml로 XSLTing하면 빈 페이지가 생깁니다.

XML :

<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="transform.xsl"?> 
<Structure> 
    <Processes> 
     <Process> 
      . 
      . 
      . 
     </Process> 
    </Processes> 
</Structure> 

XSL :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <!--trying to convert the tag to another name --> 
    <xsl:template match="/"> 
     <xsl:element name="NewStructure"> 
      <xsl:apply-templates select="Processes" /> 
     </xsl:element> 
    </xsl:templates> 
    <xsl:template name="convert_processes_tag" match="Processes"> 
     <xsl:for-each select="Processes"> 
      <xsl:element name="NewProcess" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

내 목표는 다른 뭔가 프로세스 태그를 대체하는 것입니다, 그리고 너무 XML 내부 이후 다른 모든 태그입니다. 첫 번째 시도는 가장 먼저 태그를 가장 먼저 변환하는 것이 었습니다. 나는 xml과 xsl을 해골로 잘라내려고 노력했지만 빈 페이지 만 있었다. 인터넷 검색을 시도했지만 더 혼란 스럽습니다. 나는 xsl : template이 OOP의 메소드와 같은 것을 알고 있으며 태그를 다른 이름으로 변환하는 데 많은 반복이 필요하기 때문에이를 구분하려고했습니다.

몇 시간 동안 붙어서 ... 어떤 도움을 주시면 감사하겠습니다.

편집 : IE에 대해 이것을 테스트했습니다. IE에서 테스트 할 때 XML이 표시되지 않는다고 지적한 사람이 있습니다. 그럴까요?

TIA.

답변

1

을 브라우저가 XML로 XML을 변환 디버그 XSLT 원한다면 올바른 도구가 아닙니다 파이어 폭스와 같은 브라우저가 아닌 또는 Opera이고 대상 XML 형식은 브라우저에서 렌더링 할 수있는 SVG 또는 MathML 또는 XHTML과 같은 형식입니다. IE를 사용하여 XML을 HTML (xsl : output method = "html") 또는 일반 텍스트 (xsl : output method = "text")로 변환 할 때 XML을 XML로 변환 할 때 유용합니다 (xsl : output method = "xml") 그런 다음 결과 문서의 텍스트 노드 이외에 아무것도 표시 할 것을 기대하지 마십시오. 그리고 당신의 경우에는 비 공백 문자를 포함하는 텍스트 노드가 없기 때문에 표시 할 것이 없습니다.

+0

@ 마틴 Honnen : 누가 당신을 downvoted 모르겠지만 broswer가 표시되지 않습니다 방법에 대해 당신이 말한 xml 이유는 내가 빈 페이지가 있어요. Visual Studio의 xslt 도구를 사용 했으므로 출력을 볼 수 있습니다. 텍스트 노드에 대해서는 확실하지 않지만 최소한 xslt 출력을 볼 수 있습니다. 감사! +1 – BeraCim

+0

@BeraCim : MarrowSoft Xselerator를 사용해보십시오. MSXML을 사용하는 괜찮은 무료 XSLT 디버거입니다 (Internet Explorer와 마찬가지로 대상 플랫폼이되어야 함). – Tomalak

4

XSLT는 모든 트리를 통과합니다. for-each 루프 나 명명 된 템플릿을 사용할 필요가 없습니다. 어떤 요소가 다른 요소보다 먼저 변환되는지는 신경 쓰지 않아도됩니다.

당신이해야 할 일은 당신이 만나는 모든 XML 노드에 무슨 일이 일어나길 원하는지 지정하는 것입니다.

<Structure>  <!-- write a template that matches "Structure" elements --> 
    <Processes> <!-- write a template that matches "Processes" elements --> 
     <Process> <!-- write a template that matches "Process" elements --> 
     </Process> 
    </Processes> 
</Structure> 

그래서, 이것은 이미 꽤 멀리 당신을 얻을해야합니다

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 

    <xsl:template match="Structure"> 
    <NewStructure> 
     <xsl:apply-templates /> <!-- apply-templates is the recursive step --> 
    </NewStructure> 
    </xsl:template> 

    <xsl:template match="Processes"> 
    <NewProcesses> <!-- note that you don't even need <xsl:element> --> 
     <xsl:apply-templates /> 
    </NewProcesses> 
    </xsl:template> 

    <xsl:template match="Process"> 
    <NewProcesses> 
     <xsl:apply-templates /> 
    </NewProcesses> 
    </xsl:template> 

    <!-- this empty template prevents blank text nodes from leaking through --> 
    <xsl:template match="text()[normalize-space() = '']" /> 

</xsl:stylesheet> 
+0

@Tomalak : 아직 빈 페이지가 나타납니다. 완전히 흰색 인 IE 브라우저입니다. xml 또는 xsl 문서의 헤더에 문제가 있습니까? 내 문서에 정확한 헤더가 있습니다. – BeraCim

+0

@Tomalak : 당신의 솔루션은 xsl을 적절한 방법으로 작성하는 방법을 명확히하는 데 도움이되었습니다. XSL에 OOP 사고를 적용하고 있었고, 그 생각은 인터넷 검색으로 뒷받침되었습니다. xsl을 작성하는 쉬운 방법을 지적 해 주셔서 감사합니다. +1. – BeraCim

+0

@BeraCim : 도와 줘서 다행입니다. – Tomalak

관련 문제