2012-03-15 137 views
1

我希望做的XSLT,將改變下面的輸入XML:XSLT格式化XML文檔

<?xml version="1.0" encoding="UTF-8"?> 
<payload> 
    <header> 
     <from>From: [email protected]</from> 
     <to>To: [email protected]</to> 
    </header> 

    <email> 
     <body>Hello, email body here...</body> 
    </email> 

    <attachments> 
     <attachment> 
      <name>log1</name> 
     </attachment> 

     <attachment> 
      <name>log2</name> 
     </attachment> 

    </attachments> 
</payload> 

到:

From: [email protected] 
To: [email protected] 

Hello, email body here... 

To: [email protected] 
log1 


To: [email protected] 
log2 

凡爲節點的每個附件經過反覆。可以有許多附件,而不僅僅是兩個附件。

更新來自用戶

林很新的這一點,但我想沒有頭,電子郵件和附件標籤創建一個有效載荷。然後用它們按正確順序排列它們,但這看起來很可怕。而且是不可擴展的

+1

你嘗試過什麼? http://mattgemmell.com/2008/12/08/what-have-you-tried/ SO不是一個可以避免自己沉重負擔的地方。 – 2012-03-15 14:46:17

+0

我很新,但我試圖創建一個沒有'header','email'和'attachment'標籤的負載。然後使用''將它們排列成正確的順序,但這看起來很可怕。並且不可擴展 – MMKD 2012-03-15 14:51:09

回答

2

如何:

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

    <xsl:output method="text"/> 

    <xsl:template match="from|to"> 
    <xsl:value-of select="text()"/> 
    <xsl:text>&#0010;</xsl:text> 
    </xsl:template> 

    <xsl:template match="body"> 
    <xsl:text>&#0010;</xsl:text> 
    <xsl:value-of select="text()"/> 
    <xsl:text>&#0010;</xsl:text> 
    </xsl:template> 

    <xsl:template match="attachments"> 
    <xsl:for-each select="attachment"> 
     <xsl:text>&#0010;&#0010;</xsl:text> 
     <xsl:apply-templates select="../../header/to"/> 
     <xsl:value-of select="name/text()"/> 
     <xsl:text>&#0010;</xsl:text> 
    </xsl:for-each> 
    </xsl:template> 

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

</xsl:stylesheet>