2012-08-05 113 views
0

我想使用XSLT將XML文件轉換爲其他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根本無法工作。 – 2012-08-05 12:59:05

+1

'XML文件不是純粹的樹形結構'是不是矛盾? – Kowser 2012-08-05 13:01:47

+0

XML文件使用XML標準正確形成,但爲了存儲一種數據類型,我有兩個標籤:打開'uglyStartTag'並結束'uglyEndTag'。應該有一個標籤,比如'beautyTag' – bontade 2012-08-05 13:01:58

回答

1

這種轉變

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

當這個XML文檔(由OP在評論中提供)施加:

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

產生想要的,正確的結果:

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

你能告訴我,當我試圖使用該XSLT與' \t \t dgsdgsdgsdg \t '什麼是錯的。輸出是' dgsdgsdgsdg'。我想' dgsdgsdgsdg' – bontade 2012-08-05 18:06:35

+1

@bontade,你沒有在問題中指定這樣的要求。 「內容」只是一個字符串。請編輯並更新問題。我將很快更新我的答案。 – 2012-08-05 18:34:35

+1

@bontade,我編輯了這個答案,現在它以你想要的方式處理你的新XML文檔。 – 2012-08-05 18:41:35