Text-Processing

我可以使用 xmlstarlet 將 XML 中的欄位轉換為標籤嗎?

  • January 24, 2022

例如,我想將標籤中的欄位轉換為該標籤中的標籤

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

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

我想在 Linux 命令行中使用xmlstarletor執行此操作sed

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>

引用自:https://unix.stackexchange.com/questions/222962