我想以数字方式对xml元素进行排序,但在最后一步失败(合并两个xml) 这就是我的尝试:
$ cat input.xml
<root>
<title>hello, world</title>
<items>
<item>2</item>
<item>1</item>
<item>3</item>
</items>
</root>
$ xmlstarlet sel -R -t -m '//item' -s A:N:- 'number(.)' -c '.' -n input.xml
<xsl-select>
<item>1</item>
<item>2</item>
<item>3</item>
</xsl-select>
$ xmlstarlet ed -d '//item' input.xml
<?xml version="1.0"?>
<root>
<title>hello, world</title>
<items/>
</root>
<root>
<title>hello, world</title>
<items>
<item>1</item>
<item>2</item>
<item>3</item>
</items>
</root>
答案 0 :(得分:2)
我不熟悉xmlstarlet,但是我在其文档中看到它可用于将XSL转换应用于XML文件(tr
) - 您可以将此命令与此XSLT一起使用:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="items">
<xsl:copy>
<xsl:apply-templates select="item">
<xsl:sort select="." data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在单个操作中生成已排序和合并的输出。