2010-02-25 55 views
0

我完全卡在發生了什麼,當我嘗試運行下列xml針對xsl,試圖不在瀏覽器中獲得空白頁面:XSLTing xml到另一個xml出現一個空白頁

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

瀏覽器是不是如果你要調試XSLT是將XML轉換爲XML合適的工具,除非是像火狐瀏覽器或Opera以及您的目標XML格式是一種像SVG或MathML或瀏覽器知道要呈現的XHTML的格式。 如果將XML轉換爲HTML(xsl:output method =「html」)或者純文本(xsl:output method =「text」),但是當您使用它將XML轉換爲XML(xsl:output method = 「xml」),那麼不要指望你只顯示結果文檔中的文本節點。而在你的情況下,你甚至沒有任何包含非空白字符的文本節點,所以沒有什麼可顯示的。

+0

@Martin Honnen:我不知道是誰低估了你,但是你怎麼說broswer不會顯示xml就是爲什麼我得到了一個空白頁。我使用了Visual Studio的xslt工具,現在我可以看到輸出。雖然不確定文本節點thingy,但至少我現在可以看到xslt輸出。謝謝! +1 – BeraCim 2010-02-25 22:43:26

+0

@BeraCim:嘗試MarrowSoft Xselerator,它是一個體面的免費XSLT調試器,它使用MSXML(就像Internet Explorer一樣,應該是您的目標平臺)。 – Tomalak 2010-02-26 07:10:36

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 2010-02-25 22:28:35

+0

@Tomalak:您的解決方案幫助我澄清如何正確編寫xsl。我正在將OOP思想應用於xsl,並且這種想法得到了Google的支持。感謝您指出編寫xsl的更簡單的方法。 +1。 – BeraCim 2010-02-25 22:46:25

+0

@BeraCim:很高興爲您提供幫助。 – Tomalak 2010-02-26 07:12:26