たとえば、ラベルのフィールドをそのラベル内のラベルに変換したいとします。
<book name="Data Structure" price="250" pages="350"/>
到着
<book name="Data Structure">
<price>250</price>
<pages>350</pages>
</book>
xmlstarlet
Linuxコマンドラインでまたはを使用してこれを実行したいと思いますsed
。
ベストアンサー1
process.xsl
:
<?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" indent="yes"/>
<xsl:template match="//book">
<xsl:element name="book">
<xsl:apply-templates select="./@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="book/@*">
<xsl:if test="name() = 'name'">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:if>
<xsl:if test="name() != 'name'">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
input.xml
:
<book name="Data Structure" price="250" pages="350"/>
注文する:
xsltproc process.xsl input.xml
出力:
<?xml version="1.0"?>
<book name="Data Structure">
<price>250</price>
<pages>350</pages>
</book>