我有以下SOAP文件:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<auth:Session xmlns:auth="http://www" SOAP-ENV:mustUnderstand="1">
<auth:IPAddress>1111</auth:IPAddress>
</auth:Session>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<auth:SessionT xmlns:auth="http://www.">result</auth:SessionT>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我想得到结果。我尝试过不同的方法,但每次都会出现相同的错误";SessionT上的命名空间前缀auth未定义">。
这是我尝试过的命令之一:xmlstarlet sel -t -v /auth:SessionT test.xml
Br,JD-
使用xmlstarlet
,使用-N
选项提供源文档中存在的命名空间:
$ xmlstarlet sel -N auth="http://www." -t -v "//auth:SessionT" test.xml
result
使用xmllint
,您可以简单地使用local-name()
来检查标签名称:
$ xmllint --xpath '//*[local-name() = "SessionT"]/text()' test.xml
result
没有标记,但另一种选择是使用xq
(带有yq的jq
包装器(,如下所示:
$ xq -r '.. | ."auth:SessionT"? // empty | ."#text"' test.xml
result