2017-02-28 68 views
0

我必須複製郵件以「test.com」結束,如果計數大於5的所有集。我已經嘗試了幾件事,但沒有任何似乎工作。XSLT 1.0計數,然後複製結構子結束 - 與

我該如何用xslt 1.0來做到這一點?

<root> 
    <sets> 
     <set> 
      <mail>[email protected]</mail> 
      <foo/> 
     </set> 
     <set> 
      <mail>[email protected]</mail> 
      <foo/> 
     </set> 
     <set> 
      <mail>[email protected]</mail> 
      <foo/> 
     </set> 
    </sets> 
</root> 

比如我嘗試這樣做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:if test="count(/root/sets/set[mail = '*test.com'])"> 
     <root> 
      <sets> 
       <xsl:for-each select="/root/sets/set"> 
        <xsl:if test="contains(./mail, 'test.com')"> 
         <xsl:copy-of select="./*"/> 
        </xsl:if> 
       </xsl:for-each> 
      </sets> 
     </root> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 
+1

可以告訴你,你已經嘗試過目前的XSLT,因爲它更容易修復現有的XSLT不是從頭寫一個?另外,你可以顯示你想要的當前XML的確切輸出。謝謝! –

回答

1

我要複製所有設置在此郵件末尾用 「test.com」。

如何:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="sets"> 
    <xsl:copy> 
     <xsl:apply-templates select="set[substring-after(mail, '@')='test.com']"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

嗨邁克爾,對不起,我忘了先計算元素的要求。 – Wookiee

+0

通過用你選擇的count(// set [substring-after(mail,'@')='test.com'])> 5'替換我的if test來得到它的工作。也許你能證明我怎麼能用你的解決方案來做到這一點? – Wookiee

+0

也許你可以編輯你的問題,併發佈一個例子,顯示你在每種情況下得到的確切結果(例如,如果計數大於5,如果不是? –