2011-03-03 66 views
1

我已經使用XSLT將一個XML文件轉換爲另一個XML文件(在所需結構中)。但是我無法查看XML格式的轉換文件。它顯示我純文本值。獲取XML格式的xslt轉換文件的輸出

這是我原來的XML文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="xsl.xsl"?> 
<NewDataSet> 
<Table> 
<IMPORT_ID>2</IMPORT_ID> 
<SEQ_NO>1</SEQ_NO> 
<LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG> 
<INSERTED>2004-01-21T12:42:53+05:30</INSERTED> 
<INSERTED_BY>kfsv433</INSERTED_BY> 
</Table> 
    </NewDataSet> 

而且我使用下面的XSLT它coverted我想要的輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" indent="yes"/> 
<xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
    <xsl:apply-templates /> 
</xsl:template> 
<xsl:template match="IMPORT_ID"> 
<IMPORT_ID SEQ_NO="{SEQ_NO/text()}"/> 
</xsl:template> 
</xsl:stylesheet> 

我得到的輸出

1RANDOMISATIONDATA2004-01-21T12:42:53+05:30kfsv433 

我可以看到,我已經實現的XSLT正在顯示正確的結果,但我需要以XML格式獲取此結果。

請幫助我。

+0

你可能會格式化你回答更好(使用正確的「代碼」格式),所以我們可以看到輸出是什麼樣子?另外,你能否提供一個XSLT的片段? – FarligOpptreden 2011-03-03 06:38:13

+0

好問題,+1。查看我的答案,獲得完整,簡短的解決方案和解釋。 :) – 2011-03-03 07:25:25

+1

你說你無法將結果視爲XML,但你沒有說明你是如何嘗試的。你使用瀏覽器嗎?一個文本編輯器?如果「It」顯示純文本值,那麼「它」到底是什麼? – 2011-03-03 08:49:56

回答

1

我想你想要這個

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" indent="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates /> 
    </xsl:template> 
    <xsl:template match="IMPORT_ID"> 
     <IMPORT_ID SEQ_NO="{following-sibling::SEQ_NO[1]/text()}"/> 
    </xsl:template> 

    <xsl:template match="text()"/> 
</xsl:stylesheet> 

當這種轉變是在所提供的XML文檔應用:

<NewDataSet> 
    <Table> 
     <IMPORT_ID>2</IMPORT_ID> 
     <SEQ_NO>1</SEQ_NO> 
     <LEVEL_TAG>RANDOMISATIONDATA</LEVEL_TAG> 
     <INSERTED>2004-01-21T12:42:53+05:30</INSERTED> 
     <INSERTED_BY>kfsv433</INSERTED_BY> 
    </Table> 
</NewDataSet> 

想要的結果產生

<IMPORT_ID SEQ_NO="1"/> 

說明

  1. 所有文本節點由空體,它覆蓋了默認的XSLT處理模板匹配,所以文本節點現在不會複製到輸出中。

  2. SEQ_NOIMPORT_ID一個孩子 - 這是一個兄弟

+0

非常感謝,這是非常豐富的信息!但是當我執行XML時,它沒有顯示任何結果,我懷疑XML是否正確。我在這裏包括它,你能檢查嗎?<?xml version =「1.0」encoding =「ISO-8859-1」?> <?xml-stylesheet type =「text/xsl」href =「xsl。 XSL「>

RANDOMISATIONDATA 2004-01-21T12:42:53 + 05:30 kfsv433
hima 2011-03-03 08:16:45

+0

1作出解釋。 – Flack 2011-03-03 08:17:26

+0

@hima:是的,我發表了他們的答案,然後發表。使用我擁有的所有7個XSLT 1.0處理器運行時,此轉換會產生相同的正確結果。似乎您在瀏覽器中使用XSLT,並且XSLT處理器可能有問題,或者您可能試圖對第一次轉換的結果應用第二次轉換,而AFAIR IE不支持該轉換。 – 2011-03-03 13:48:40

0

您正在獲取默認輸出,這意味着您的IMPORT_ID模板未執行。

試試下面的模板,而不是:

<xsl:template match="/"> 
    <xsl:apply-templates select="//Table"/> 
</xsl:template> 

<xsl:template match="Table"> 
    <IMPORT_ID SEQ_NO="{SEQ_NO}/{IMPORT_ID}"/> 
</xsl:template> 
+0

非常感謝。但是,當你說響應,你的意思是在我原來的XML文件? – hima 2011-03-03 06:46:55

+0

對不起,我誤解了這個問題。看到我修改後的答案。 – harpo 2011-03-03 06:52:43

+0

我還沒有得到任何輸出,頁面仍然是空白的:( – hima 2011-03-03 09:21:36