scal dwa elementy używając xslt na podstawie wartości atrybutów
Tak wygląda mój plik źródłowy:
<?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>
Szukam scalenia dwóch atrybutów w jeden i skopiowania wszystkich pasujących linii z nową zmienną@New_Value@
i skopiuj wszystkie inne niepasujące linie na koniec pliku.
Ten problem jest podobny do pytania, które opublikowałem wcześniejscal atrybut nadrzędny i podrzędny za pomocą xslt na podstawie wartości atrybutów Jedyną różnicą jest format treści w pliku XML.
Opierając się na rozwiązaniu dostarczonym w powyższym adresie URL, zmodyfikowałem mój xsl, aby uzyskać nowy plik XML, oto plik 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>
Ale jakoś nie udało mi się uzyskać oczekiwanego rezultatu, a oczekiwany wynik to oczekiwany przeze mnie wynik:
<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>