使用xslt,我想删除没有part
的所有partid
元素等于<RtoP>
的子元素。
<tran>
<part>
<Partid>123
</Partid>
</part>
<part>
<Partid>200
</Partid>
</part>
<part>
<Partid>777
</Partid>
</part>
<refs>
<RtoP>
<partid>200</partid>
</RtoP>
</refs>
</tran>
结果是
<tran>
<part>
<Partid>200
</Partid>
</part>
<refs>
<RtoP>
<partid>200</partid>
</RtoP>
<refs>
</tran>
请协助如何在xslt中执行此操作。
答案 0 :(得分:1)
尝试从身份模板开始,添加一个空part
元素的空模板,该partid
元素不等于RtoP
的{{1}}个孩子......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template
match="part[normalize-space(Partid) != normalize-space(/tran/refs/RtoP/partid)]"/>
</xsl:stylesheet>
如果可能有多个RtoP
元素或多个RtoP
子元素,请考虑使用xsl:key ...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="keep" match="RtoP/*" use="normalize-space()"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="part[not(key('keep',normalize-space()))]"/>
</xsl:stylesheet>
编辑:来自http://xsltransform.net/93dEHG6/8的最新输入/ xslt /输出示例
<强>输入强>
<my:TRAN xmlns:my="himom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<my:DAY>
<my:LANE>
<my:LANEID>900</my:LANEID>
</my:LANE>
<my:COT>
<my:place>
<my:PR>
<my:RID>253503</my:RID>
</my:PR>
<my:Acreage>0</my:Acreage>
<my:City>Mars</my:City>
</my:place>
<my:COTID>31263</my:COTID>
</my:COT>
<my:PART>
<my:PARTId>123</my:PARTId>
</my:PART>
<my:PART>
<my:PARTId>200</my:PARTId>
</my:PART>
<my:PART>
<my:PARTId>777</my:PARTId>
</my:PART>
<my:REFERENCES>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>200</my:PARTId>
<my:PARTRoleType>B</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>134175</my:PARTId>
<my:PARTRoleType>I</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>777</my:PARTId>
<my:PARTRoleType>R</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>121871</my:PARTId>
<my:PARTRoleType>S</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>87372</my:PARTId>
<my:PARTRoleType>IC</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253504</my:RID>
<my:PARTId>123</my:PARTId>
<my:PARTRoleType>IC</my:PARTRoleType>
</my:RToP>
</my:REFERENCES>
<my:DAYIdentifier />
</my:DAY>
</my:TRAN>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="himom">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="keep"
match="my:RToP[normalize-space(my:RID) = normalize-space(/my:TRAN/my:DAY/my:COT/my:place/my:PR/my:RID)]"
use="normalize-space(my:PARTId)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="my:RToP[normalize-space(my:RID) != normalize-space(/my:TRAN/my:DAY/my:COT/my:place/my:PR/my:RID)]"/>
<xsl:template match="my:PART[not(key('keep',normalize-space(my:PARTId)))]"/>
</xsl:stylesheet>
<强>输出强>
<my:TRAN xmlns:my="himom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<my:DAY>
<my:LANE>
<my:LANEID>900</my:LANEID>
</my:LANE>
<my:COT>
<my:place>
<my:PR>
<my:RID>253503</my:RID>
</my:PR>
<my:Acreage>0</my:Acreage>
<my:City>Mars</my:City>
</my:place>
<my:COTID>31263</my:COTID>
</my:COT>
<my:PART>
<my:PARTId>200</my:PARTId>
</my:PART>
<my:PART>
<my:PARTId>777</my:PARTId>
</my:PART>
<my:REFERENCES>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>200</my:PARTId>
<my:PARTRoleType>B</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>134175</my:PARTId>
<my:PARTRoleType>I</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>777</my:PARTId>
<my:PARTRoleType>R</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>121871</my:PARTId>
<my:PARTRoleType>S</my:PARTRoleType>
</my:RToP>
<my:RToP>
<my:RID>253503</my:RID>
<my:PARTId>87372</my:PARTId>
<my:PARTRoleType>IC</my:PARTRoleType>
</my:RToP>
</my:REFERENCES>
<my:DAYIdentifier/>
</my:DAY>
</my:TRAN>