xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Удалить вершину с повторяющимся идентификатором XML


Автор Сообщение
its_dens
Новичок

Зарегистрирован: 10.03.2009
Сообщения: 2

[13613] Вт Мар 10, 2009 13:53
Удалить вершину с повторяющимся идентификатором XML
Привет всем.

Подскажите плиз как удалить из XML вершины с одинаковыми идентификаторами и оставить дочерние вершины от первой.

Исходный XML
<?xml version="1.0" encoding="utf-8" ?>
- <templates>
- <template name="1">
<par name="1">456</par>
<par name="2">678</par>
<par name="3">Tyu</par>
</template>
- <template name="2">
<par name="1">8768</par>
<par name="2">WR</par>
<par name="3">645</par>
</template>
<template name="1">
<par name="1">23</par>
<par name="2">657</par>
<par name="3">WERT</par>
</template>
</templates>

Нужно получить
<?xml version="1.0" encoding="utf-8" ?>
- <templates>
- <template name="1">
<par name="1">456</par>
<par name="2">678</par>
<par name="3">Tyu</par>
</template>
- <template name="2">
<par name="1">8768</par>
<par name="2">WR</par>
<par name="3">645</par>
</template>
</templates>


Сейчас при помощи xslt удаляет дочерние, а их нужно оставить.
<?xml version="1.0" encoding="utf-8" ?>
<templates>
<template name="1" />
<template name="2" />
</templates>

XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<templates>
<xsl:for-each select="//template[@name and not(@name = preceding::template/@name)]">
<template name="{@name}"/>
</xsl:for-each>
</templates>
</xsl:template>
</xsl:stylesheet>
its_dens
Новичок

Зарегистрирован: 10.03.2009
Сообщения: 2

[13614] Вт Мар 10, 2009 15:04

решил при помощи
xsl:copy-of