2017-02-01 12 views
0

Я хочу, чтобы сохранить элемент в XML и удалить другие, в XSLT 1.0, основанный на значении атрибута, муз соответствует родительский атрибутXSLT 1.0: Удалить элемент на основе атрибута элемента, соответствующего атрибута родительского

Я хочу сохранить только элементы DONNEES, где атрибут Journee соответствует родительскому атрибуту Date. Это может быть любая дата, когда я не могу положить что-то вроде = '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

Вы должны использовать относительный путь в своем выражении, чтобы получить дату предка

Попробуйте этот 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> 
+0

Спасибо большое, это работает! !! – CRT