![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Есть xml вида:
<root>
<node1>
<child1>
<f0>a</f0>
<f1>b</f1>
<f2>c</f2>
<f3>d</f3>
</child1>
</node1>
<node2>
<child2>
<f0>a</f0>
<f1>b</f1>
<f2>c</f2>
<f3>d</f3>
</child2>
<child2>
<f0>f</f0>
<f1>g</f1>
<f2>h</f2>
<f3>i</f3>
</child2>
</node2>
</root>
Надо его преобразовать в
<root>
<node1>
<child1 attr2="b" attr1="a">
<f2>c</f2>
<f3>d</f3>
</child1>
</node1>
<node2>
<child2 attr2="b" attr1="a">
<f2>c</f2>
<f3>d</f3>
</child2>
<child2 attr2="g" attr1="f">
<f2>h</f2>
<f3>i</f3>
</child2>
</node2>
</root>
Помогите написать xsl или, может быть, существуют другие реализации. Куда стоит сделать кросспост?
<root>
<node1>
<child1>
<f0>a</f0>
<f1>b</f1>
<f2>c</f2>
<f3>d</f3>
</child1>
</node1>
<node2>
<child2>
<f0>a</f0>
<f1>b</f1>
<f2>c</f2>
<f3>d</f3>
</child2>
<child2>
<f0>f</f0>
<f1>g</f1>
<f2>h</f2>
<f3>i</f3>
</child2>
</node2>
</root>
Надо его преобразовать в
<root>
<node1>
<child1 attr2="b" attr1="a">
<f2>c</f2>
<f3>d</f3>
</child1>
</node1>
<node2>
<child2 attr2="b" attr1="a">
<f2>c</f2>
<f3>d</f3>
</child2>
<child2 attr2="g" attr1="f">
<f2>h</f2>
<f3>i</f3>
</child2>
</node2>
</root>
Помогите написать xsl или, может быть, существуют другие реализации. Куда стоит сделать кросспост?
no subject
Date: 2007-08-29 12:48 pm (UTC)<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:copy>
<xsl:for-each select="f1|f0">
<xsl:attribute name="f1">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:attribute name="f0">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="f3|f2">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:apply-templates select="*[* or @*]|text()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
no subject
Date: 2007-08-29 02:46 pm (UTC)no subject
Date: 2007-08-29 02:48 pm (UTC)no subject
Date: 2007-08-29 02:50 pm (UTC)no subject
Date: 2007-08-29 02:58 pm (UTC)<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:copy>
<xsl:for-each select="f1">
<xsl:attribute name="f1">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="f0">
<xsl:attribute name="f0">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="f3|f2">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
<xsl:apply-templates select="*[* or @*]|text()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
no subject
Date: 2007-08-30 06:02 am (UTC)no subject
Date: 2007-08-30 03:36 pm (UTC)no subject
Date: 2007-08-31 06:18 am (UTC)