如何用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
相关产品推荐
相关产品推荐

