我可以使用 xmlstarlet 将 XML 中的字段转换为标签吗?

kri*_*hna 5 xml text-processing xmlstarlet

例如,我想将标签中的字段转换为该标签内的标签

<book name="Data Structure" price="250" pages="350"/>
Run Code Online (Sandbox Code Playgroud)

<book name="Data Structure"> 
<price>250</price>
<pages>350</pages>
</book>
Run Code Online (Sandbox Code Playgroud)

xmlstarlet我想使用或在 Linux 命令行中执行此操作sed

neu*_*ron 4

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>
Run Code Online (Sandbox Code Playgroud)

input.xml:

<book name="Data Structure" price="250" pages="350"/>
Run Code Online (Sandbox Code Playgroud)

命令:

xsltproc process.xsl input.xml

输出:

<?xml version="1.0"?>
<book name="Data Structure">
  <price>250</price>
  <pages>350</pages>
</book>
Run Code Online (Sandbox Code Playgroud)