我是XSLT的新手,你能帮忙写一个XSLT语法: 我需要将输入Xml转换为下面显示的输出。我需要选择Id' 9'和' 1'仅
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">jon@123.com
</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">pete@tets.com
</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为9和1的id,firstname,lastname和字段。
提前致谢
答案 0 :(得分:0)
在xsl中,当循环遍历场数组中的字段元素时,可以为选择添加选择条件。
例如:
<xsl:for-each select="field[@id='9' or @id='1']">
<!-- do something -->
</xsl:for-each>
select =“field [@ id = 9或@ id = 1]”基本上是指选择与条件[@ id = 9或@ id = 1]匹配的字段元素。 @引用一个属性,没有@你将看到field元素中的一个元素。
答案 1 :(得分: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>