You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用xmlstarlet给XML自闭合标签添加"null"字符串?

问题:处理ServiceNow REST API返回XML中的自闭合标签

我正尝试基于Service-Now REST API返回的XML数据创建sqlite3加载器,但该XML返回结果中存在自闭合标签。若能将空自闭合标签转换为包含"null"值的开闭标签对,就能解析数组中的对应字段。已尝试sed等工具但认为并非合适方案,因为无法检测空标签状态,且当返回结果包含多条有效数据时,通过状态码检测的方式不可行。


当前XML结构

# cat test.xml | xmllint --format -

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <result>
    <serial_number>
      <display_value>6W5QY03</display_value>
      <value>6W5QY03</value>
    </serial_number>
    <location>
      <display_value/>
      <value/>
    </location>
  </result>
</response>

期望XML结构

# cat test.xml | xmllint --format -

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <result>
    <serial_number>
      <display_value>6W5QY03</display_value>
      <value>6W5QY03</value>
    </serial_number>
    <location>
      <display_value>null</display_value>
      <value>null</value>
    </location>
  </result>
</response>

测试示例

# cat test.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <response>
      <result>
        <serial_number>
          <display_value>6W5QY03</display_value>
          <value>6W5QY03</value>
        </serial_number>
        <location>
          <display_value/>
          <value/>
        </location>
      </result>
    </response>

# xmlstarlet sel -T -t -v "response/result/location/display_value/text()" test.xml

# echo $?
1

# xmlstarlet sel -T -t -v "response/result/serial_number/display_value/text()" test.xml
6W5QY03
# echo $?
0

内容的提问来源于stack exchange,提问作者Bruce Ferjulian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:37:35