gpt4 book ai didi

xml - 更新 xml 值的脚本

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


我正在尝试使用 AWK 脚本根据条件对 xml 文件进行更新。谁能帮我解决这个问题?

students.xml

<students>
<student>
<stuId>1</stuId>
<name>A</name>
<mark>75</mark>
<result></result>
</student>
<student>
<stuId>2</stuId>
<name>B</name>
<mark>35</mark>
<result></result>
</student>
<student>
<stuId>1</stuId>
<name>C</name>
<mark>94</mark>
<result></result>
</student>
</students>

到目前为止我尝试过的代码

我可以使用下面的代码提取标签值

BEGIN { RS="<[^>]+>" } 
{ print RT, $0 }

这会按预期打印所有标签和值。

我想更新 <result>如果标记> 40,则标记为通过,否则失败

输出

<students>
<student>
<stuId>1</stuId>
<name>A</name>
<mark>75</mark>
<result>pass</result>
</student>
<student>
<stuId>2</stuId>
<name>B</name>
<mark>35</mark>
<result>fail</result>
</student>
<student>
<stuId>1</stuId>
<name>C</name>
<mark>94</mark>
<result>pass</result>
</student>
</students>

有人可以帮我解决这个问题吗?

最佳答案

另一种选择是使用 ed (edit) commandxmlstarlet ...

xmlstarlet ed -L -u "//student[mark >= 40]/result" -v "pass" -u "//student[40 > mark]/result" -v "fail" students.xml

注意:命令行中的 -L 将就地编辑文件。如果这不是您想要的行为,请务必将其删除。

您还可以将 XSLT 1.0 与 xmlstartlet(tr (transform) command)结合使用...

更新.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="student[mark >= 40]/result">
<xsl:copy>pass</xsl:copy>
</xsl:template>

<xsl:template match="student[40 > mark]/result">
<xsl:copy>fail</xsl:copy>
</xsl:template>

</xsl:stylesheet>

命令行

xmlstarlet tr update.xsl students.xml

关于xml - 更新 xml 值的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311030/

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