Так вот мой вклад XML:XSLT 1.0 Копировать атрибут каждого согласующего элемента
<?xml version="1.0" encoding="utf-8"?>
<modifs>
<modif id="229818">
<avant num_words="1">dans</avant>
<apres num_words="1">par</apres></modif>
<modif id="196216">
<avant num_words="1">dans</avant>
<apres num_words="1">parmi</apres></modif>
<modif id="2162">
<avant num_words="1">dans</avant>
<apres num_words="1">pour</apres></modif>
<modif id="9273">
<avant num_words="1">dans</avant>
<apres num_words="1">pour</apres></modif>
</modifs>
В основном то, что я хочу сделать, это скопировать все, за исключением дублированного контента. Для указанного дублированного содержимого я хотел бы сгруппировать различные идентификаторы в первом элементе того же типа. В результате я хотел бы получить было бы что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<modifs>
<modif id="229818">
<avant num_words="1">dans</avant>
<apres num_words="1">par</apres></modif>
<modif id="196216">
<avant num_words="1">dans</avant>
<apres num_words="1">parmi</apres></modif>
<modif id="2162">
<extra_id="9273">
<avant num_words="1">dans</avant>
<apres num_words="1">pour</apres></modif>
</modifs>
А вот моя попытка до сих пор: Я пытаюсь проверить сначала, если есть уже дубликата (если да, то ничего не делать), затем, если после этого есть дубликаты. Если они есть, получите атрибут id и скопируйте его. (Вот чего я не знаю, как это сделать). Наконец, если нет дубликатов, просто скопируйте элемент.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="modifs">
<xsl:for-each select="./modif">
<xsl:choose>
<xsl:when test="./avant=preceding-sibling::modif/avant">
<xsl:if test="./apres=preceding-sibling::modif/apres">
</xsl:if>
</xsl:when>
<xsl:when test="./avant=following-sibling::modif/avant">
<xsl:if test="./apres=following-sibling::modif/apres">
<xsl:element name="modif">
<xsl:for-each select="following-sibling::modif/@id=./@id">
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:copy-of select="."/>
</xsl:element>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Я не знаю, если мой вопрос ясен, если нет, или если есть какие-либо другие проблемы с ним (или с моим английским), пожалуйста, скажите мне, я с удовольствием его изменить.
Благодаря
Я хотел бы предложить вам начать здесь: http://www.jenitennison.com/ xslt/grouping/muenchian.html –