Text-Processing
我可以使用 xmlstarlet 將 XML 中的欄位轉換為標籤嗎?
例如,我想將標籤中的欄位轉換為該標籤中的標籤
<book name="Data Structure" price="250" pages="350"/>
到
<book name="Data Structure"> <price>250</price> <pages>350</pages> </book>
我想在 Linux 命令行中使用
xmlstarlet
or執行此操作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>