2015-10-19 2 views
0

Учитывая следующий пример XML-файл:XSLT: скопировать узел в зависимости от его значения

<A> 
    <B> 
     <elem1 att1="SN:" att2="toto" att3="tata"/> 
    </B> 
    <B> 
     <elem1 att1="tata" att2="SN:" att3="toto"/> 
    </B> 
    <B> 
     <elem1 att1="toto" att2="tata" att3="SN:"/> 
    </B> 
</A> 

Я хочу, чтобы выполнить преобразование XSL, чтобы удалить атрибуты, значение которого равно «SN:», в результате чего в ожидая выход:

<A> 
    <B> 
     <elem1 att2="toto" att3="tata"/> 
    </B> 
    <B> 
     <elem1 att1="tata" att3="toto"/> 
    </B> 
    <B> 
     <elem1 att1="toto" att2="tata"/> 
    </B> 
</A> 

можно выделить элементы с условием, когда тот же элемент имеет атрибут сопоставления, но как я могу выделить элементы, когда я не знаю, какой атрибут равен «SN:»?

Возможно, более точным: я знаю, как изолировать элементы, такие как если att1 значение = «SN:», а затем удалить его, но как я могу просто сделать , если значение attX = «SN:», а затем удалить его ,

Я хочу удалить их, чтобы я мог объединить «SN:» с другим значением из другого элемента.

ответ

1

Просто скопируйте все как с помощью тождественного преобразования шаблона, и подавить любой атрибут со значением «SN:» путем сопоставления его с пустым шаблоном.

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="@*[.='SN:']"/> 

</xsl:stylesheet> 
+0

Ooh, быстрый и правильный ответ! Работает как шарм, я не ожидал ответа сегодня вечером, но благодаря вам, я могу закончить свою задачу, прежде чем покинуть работу :) Спасибо! –

Смежные вопросы