xmlstarletを使用してXMLのフィールドをタグに変換できますか?

xmlstarletを使用してXMLのフィールドをタグに変換できますか?

たとえば、ラベルのフィールドをそのラベル内のラベルに変換したいとします。

<book name="Data Structure" price="250" pages="350"/>

到着

<book name="Data Structure"> 
<price>250</price>
<pages>350</pages>
</book>

xmlstarletLinuxコマンドラインでまたはを使用してこれを実行したいと思います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>

おすすめ記事