次のXMLドキュメントがあります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Entity Type="defect">
<Fields>
<Field Name="user-28"/>
<Field Name="user-29">
<Value>1</Value>
</Field>
<Field Name="has-change">
<Value></Value>
</Field>
...
これを変換して、すべてのField
要素が要素にName
変換された属性を持つ要素になり、要素を削除するようにしようとしていFields
ます。これまでのところ、次の変換を使用して部分的に成功しています。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes"/>
<xsl:template match="//Entity">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Field">
<xsl:element name="{@Name}">
<xsl:value-of select="Value"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
その結果、次のようになります。これは部分的には正しいですが、要素のType
属性が失われます。Entity
<?xml version="1.0" encoding="UTF-8"?>
<Entity>
<user-28/>
<user-29>1</user-29>
<has-change/>
さらに厄介なのは、ルートノードを失うことなくEntities
複数のノードを持つルートノードを含む次のドキュメントでもこれを機能させる必要があることです。Entity
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Entities TotalResults="60">
<Entity Type="defect">
<Fields>
<Field Name="id">
<Value>1161</Value>
</Field>