объединить два элемента, используя xslt на основе значений атрибута

Вот как выглядит мой исходный файл:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<book>
    <mbean code="org.book.mybooks"  name="mycompany.props.jndi:name=mybookprops">   
        <attribute name="bookprops">
            abc.mybook.onebook=@Value@
            def.mybook.twobook=@Value@
            ghi.myebook.threebook=@Value@
        </attribute>
    </mbean>
    <book>
        <mbean code="org.book.mybooks"  name="mycompany.props.jndi:name=mybookprops">   
            <attribute name="bookprops">
            abc.mybook.onebook=@New_Value@
            def.mybook.twobook=@New_Value@
            ghi.myebook.fourbook=@Value@

            </attribute>
        </mbean>
    </book>
</book>

Я ищу, чтобы объединить два атрибута в один и скопировать все соответствующие строки с новой переменной@New_Value@ и скопируйте все остальные несоответствующие строки в конец файла.

Эта проблема очень похожа на вопрос, который я опубликовал ранееобъединить родительские и дочерние атрибуты, используя xslt на основе значений атрибутов Единственная разница заключается в формате содержимого файла XML.

Основываясь на решении, которое было предоставлено в приведенном выше URL, я настроил свой xsl, чтобы заставить работать этот новый файл XML, вот файл xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:jndi="urn:jboss:jndi-binding-service:1.0"  >
    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" /> 
    <xsl:template match="book/book"> 
        <book>
            <mbean code="org.book.mybooks" name="mycompany.props.jndi:name=mybookprops">    
                <attribute name="bookprops">
                    <xsl:copy-of select="mbean/attribute/node()"/>
                    <xsl:call-template name="Mbean">
                        <xsl:with-param name="bindings" select="book/mbean/attribute"/>
                    </xsl:call-template> 
                </attribute>
            </mbean>
        </book>
    </xsl:template>  

    <xsl:template name="Mbean">
        <xsl:param name="bindings"/>
        <xsl:for-each select="/book/mbean/attribute/node()">
            <xsl:variable name="currentBinding" select="self::node()"/>  
            <xsl:if test="not(node()[. = $bindings])">
                <xsl:copy-of select="self::node()"/>
            </xsl:if>                        
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

Но каким-то образом я не смог получить ожидаемый результат, вот ожидаемый результат, который я ищу:

<book>
    <mbean code="org.book.mybooks"  name="mycompany.props.jndi:name=mybookprops">   
        <attribute name="bookprops">
            abc.mybook.onebook=@New_Value@
            def.mybook.twobook=@New_Value@
            ghi.myebook.threebook=@Value@
            ghi.myebook.fourbook=@Value@
        </attribute>
    </mbean>
</book>

Ответы на вопрос(1)

Ваш ответ на вопрос