2016-08-26 88 views
0

我是XSLT新手,你們可以幫忙寫一個XSLT語法: 我需要將我的輸入Xml轉換爲下面顯示的輸出。我只需要選擇Id'9'和'1'的節點。XSLT:只複製少量節點

My input XML: 
<contacts> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="4" name="Gender">M 
     </field> 
     <field id="9" name="DOB">10/10/1961 
     </field> 
     <field id="1" name="Mobile">2132312435 
     </field> 
     <field id="7" name="E-mail">[email protected] 
     </field> 
    </fields> 
</contact> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="4" name="Gender">M 
     </field> 
     <field id="9" name="DOB">12/12/1956 
     </field> 
     <field id="1" name="Mobile">234523452345 
     </field> 
     <field id="7" name="E-mail">[email protected] 
     </field> 
    </fields> 
</contact> 
</contacts> 


The output I want: 
<contacts> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="9" name="DOB">10/10/1961 
     </field> 
     <field id="1" name="Mobile">2132312435 
     </field> 
    </fields> 
</contact> 
<contact> 
    <id>1234567</id> 
    <firstname>Pete</firstname> 
    <lastname>Kelly</lastname> 
    <fields type="array"> 
     <field id="9" name="DOB">12/12/1956 
     </field> 
     <field id="1" name="Mobile">234523452345 
     </field> 
    </fields> 
</contact> 
</contacts> 

基本上循環遍歷您的域的域元素時,循環通過接觸和獲取ID,姓名,提前

回答

0

簡單,您只需要一個身份模板和一個覆蓋模板來刪除不需要的節點。更喜歡

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:strip-space elements="*"/> 
    <xsl:output indent="yes"/> 

    <!-- identity template --> 

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

    <!-- If field ID is not equal to 9 and 1, delete it --> 
    <xsl:template match="field[@id!=9 and @id!=1]"/> 

</xsl:stylesheet> 
+0

太好了。多謝你們。 – Josf

0

在你的XSL,姓氏和字段ID爲9和1

謝謝數組,您可以將選擇標準添加到選擇。

例如:

<xsl:for-each select="field[@id='9' or @id='1']"> 
    <!-- do something --> 
</xsl:for-each> 

選擇= 「字段[@ ID = 9或@ ID = 1]」 basicly手段選擇與條件匹配的域元素[@ ID = 9或@ ID = 1] 。 @指的是一個屬性,沒有@你會在字段元素內查看元素。