次のような XML があります。
<LISTOFHARDWARE>
<HARDWARE>
<item>
<SERIALNUMBER>D4242050101</SERIALNUMBER>
<STATUS>2 </STATUS>
<STATUSREASON>998 </STATUSREASON>
<MACADDRESS />
<LINKEDSMARTCARD>4135237101</LINKEDSMARTCARD>
<PRODUCTDETAIL>
<TYPE>DEVICE</TYPE>
<MODEL>ABC123</MODEL>
</PRODUCTDETAIL>
</item>
<item>
<SERIALNUMBER>D4242050101</SERIALNUMBER>
<STATUS>2 </STATUS>
<STATUSREASON>998 </STATUSREASON>
<MACADDRESS />
<LINKEDSMARTCARD>4135237101</LINKEDSMARTCARD>
<PRODUCTDETAIL>
<TYPE>DEVICE</TYPE>
<MODEL>ABC123</MODEL>
</PRODUCTDETAIL>
</item>
</HARDWARE>
</LISTOFHARDWARE>
結果が次のようになるように、要素を要素 (直接の親要素) に<item>
置き換え、親要素を削除したいと思います。<HARDWARE>
<HARDWARE>
<LISTOFHARDWARE>
<HARDWARE>
<SERIALNUMBER>D4242050101</SERIALNUMBER>
<STATUS>2 </STATUS>
<STATUSREASON>998 </STATUSREASON>
<MACADDRESS />
<LINKEDSMARTCARD>4135237101</LINKEDSMARTCARD>
<PRODUCTDETAIL>
<TYPE>DEVICE</TYPE>
<MODEL>ABC123</MODEL>
</PRODUCTDETAIL>
</HARDWARE>
<HARDWARE>
<SERIALNUMBER>D4242050101</SERIALNUMBER>
<STATUS>2 </STATUS>
<STATUSREASON>998 </STATUSREASON>
<MACADDRESS />
<LINKEDSMARTCARD>4135237101</LINKEDSMARTCARD>
<PRODUCTDETAIL>
<TYPE>DEVICE</TYPE>
<MODEL>ABC123</MODEL>
</PRODUCTDETAIL>
</HARDWARE>
</LISTOFHARDWARE>
<item>
要素を含む任意の XML ファイルで機能する XSL 変換でこれを行う方法はありますか?
編集
この回答ともう少し調査した後、私はほとんどそこにいますが、完全ではありません。次の点を考慮してください。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- Replace <item> with name of parent element -->
<xsl:template match="item">
<xsl:element name="{name(..)}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<!-- Remove immediate parent of <item> elements -->
<xsl:template match="item/.."> <!-- Results in syntax error -->
<xsl:apply-templates select="@*|node()" />
</xsl:template>
</xsl:stylesheet>
問題は、要素を親の名前に変更した後、親を動的に参照して要素<item>
の親を削除できないことです。item