我想在XML中保留元素,并在XSLT 1.0中基于与父属性匹配的属性值删除其他元素
我想只保留属性Journee与父属性Date匹配的DONNEES元素。它可以是任何我不能写的东西='2015-09-17T06:00:00'。
这是XML示例
<?xml version="1.0"?>
<Root>
<JOURNEE Date="2015-09-17T06:00:00">
<ID>
<DONNEES Journee="2015-09-17T06:00:00"/>
<DONNEES Journee="2015-09-18T06:00:00"/>
<DONNEES Journee="2015-09-19T06:00:00"/>
</ID>
</JOURNEE>
<JOURNEE Date="2015-09-18T06:00:00">
<ID>
<DONNEES Journee="2015-09-17T06:00:00"/>
<DONNEES Journee="2015-09-18T06:00:00"/>
<DONNEES Journee="2015-09-19T06:00:00"/>
</ID>
</JOURNEE>
<JOURNEE Date="2015-09-19T06:00:00">
<ID>
<DONNEES Journee="2015-09-17T06:00:00"/>
<DONNEES Journee="2015-09-18T06:00:00"/>
<DONNEES Journee="2015-09-19T06:00:00"/>
</ID>
</JOURNEE>
</Root>
这是我想要的输出
<Root>
<JOURNEE Date="2015-09-17T06:00:00">
<ID>
<DONNEES Journee="2015-09-17T06:00:00"/>
</ID>
</JOURNEE>
<JOURNEE Date="2015-09-18T06:00:00">
<ID>
<DONNEES Journee="2015-09-18T06:00:00"/>
</ID>
</JOURNEE>
<JOURNEE Date="2015-09-19T06:00:00">
<ID>
<DONNEES Journee="2015-09-19T06:00:00"/>
</ID>
</JOURNEE>
</Root>
这是我现在使用的XSLT,它无法删除所有数据
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*/*DONNEES[(@Journee != /*/JOURNEE/@Date)]" />
我尝试了这个并且它可以工作,但我不能拥有这样的数据
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*/*DONNEES[(@Journee != '2015-09-17T06:00:00')]" />
谢谢:)
答案 0 :(得分:1)
您应该在表达式中使用相对路径来获取祖先日期
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="DONNEES[@Journee != ../../@Date]" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>