2012-01-10 119 views
2

我有一個需求,我需要從XML文檔生成文本文件,生成的文本文件應該基於某些規則以某種特定格式生成。我的XML看起來如下東西:將XML轉換爲文本的XSLT

<info> 
<Tag1> 
    <Tag2> 
    <Tag3> 
    <PartNo>12 </PartNo> 
    </Tag3> 
    <DBOMInf1> 111 </DBOMInf1> 
    <DBOMInf2> sring </DBOMInf2> 
    </Tag2> 
    <Tag2> 
    <Tag3> 
    <PartNo>12 </PartNo> 
    </Tag3> 
    <DBOMInf1> 555 </DBOMInf1> 
    <DBOMInf2> abcd </DBOMInf2> 
    </Tag2> 
    </Tag1> 
    <Tag4> 
    <Tag5> 
    <Description>1200 liter </Description> 
    <No>12</No> 
    <Name>Engine</Name> 
    <Id>700</Id> 
    </Tag5> 
    </Tag4> 
    <action> 
    <actionId>700</actionId> 
    </action> 
</info> 
    文本
  • 預期輸出格式:

ACTIONID | NO |說明|名稱| DBOMInf1 | DBOMInf2 700 | 12 |發動機|1200升| 111 | sring 700 | 12 |發動機| 1200升| 555 | abcd

我是新來的XSLT編程任何機構都可以共享一些信息或示例,我如何實現這一點,我熟悉XSLT的基礎,如模板匹配,select的值。

任何鏈接或示例都會非常有幫助。 感謝

+0

您可以編輯您的問題,並闡述什麼是「一些規則」實際上是,因爲它不是從你期望的輸出完全清楚。看起來你想爲每個** Tag2 **元素添加一行,從** Tag4 **元素中查找額外的信息,但這只是一個猜測。 – 2012-01-10 08:52:25

+0

是的,你是正確的,我有參考格式和我的輸出應該有Tag2,Tag4等值排列在列中所示。 – Rajul 2012-01-10 09:26:23

+0

可能使用[使用xsl輸出純文本]的副本(http://stackoverflow.com/questions/5908668/use-xsl-to-output-plain-text) – givanse 2014-07-18 22:05:30

回答

7

它看起來像你想爲每個與Tag2元一排,在這種情況下,這些很容易被做符合以下(假設您目前定位在信息元素

<xsl:apply-templates select="Tag1/Tag2" /> 

但它也看起來像你想查找信息從Tag5元素。在這種情況下,您可以使用一個鍵來查找這樣的值,基於元素。關鍵將被定義如下:

<xsl:key name="Tags" match="Tag5" use="No" /> 

以及查找一個給定與Tag2元素的標籤,你可以做到以下幾點:

<xsl:apply-templates select="key('Tags', normalize-space(Tag3/PartNo))" /> 

(注意,規範空間從元素中刪除多餘的空格)

以下是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="yes"/> 
    <xsl:key name="Tags" match="Tag5" use="No" /> 

    <xsl:template match="/info"> 
     <xsl:text>ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2</xsl:text> 
     <xsl:value-of select="'&#13;'" /> 
     <xsl:apply-templates select="Tag1/Tag2" /> 
    </xsl:template> 

    <xsl:template match="Tag2"> 
     <xsl:apply-templates select="key('Tags', normalize-space(Tag3/PartNo))" /> 
     <xsl:value-of select="concat(DBOMInf1, '|', DBOMInf2, '&#13;')" /> 
    </xsl:template> 

    <xsl:template match="Tag5"> 
     <xsl:value-of select="concat(Id, '|', No, '|', Name, '|', Description, '|')" /> 
    </xsl:template> 
</xsl:stylesheet> 

當施加到您輸入XML,下面的文字是輸出

ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2 
700|12|Engine|1200 liter | 111 | sring 
700|12|Engine|1200 liter | 555 | abcd 
+0

非常感謝Tim,我正在努力並重新回到您。 – Rajul 2012-01-10 10:03:44