gpt4 book ai didi

xml - 如何使用 xmlstarlet 合并两个 xml?

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:52 26 4
gpt4 key购买 nike

我想对 xml 元素进行数字排序,但在最后一步(合并两个 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>

最佳答案

我不熟悉 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>

在单个操作中生成排序和合并的输出。

关于xml - 如何使用 xmlstarlet 合并两个 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com