加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 使用xmllint从XML获取节点值

发布时间:2020-12-15 17:02:03 所属栏目:安全 来源:网络整理
导读:我有一个名为Det.xml的xml,如下所示: ?xml version="1.0" encoding="UTF-8"? S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" S:Body ns4:grtHgetRed xmlns:ns2="http://object" xmlns:ns3="http://object" xmlns:ns4="http://object" Req
我有一个名为Det.xml的xml,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
        <S:Body>
            <ns4:grtHgetRed xmlns:ns2="http://object" xmlns:ns3="http://object" xmlns:ns4="http://object">
                <RequestId>lol</RequestId>
                <MessageDateTime>54.009</MessageDateTime>
                <SenderId>UH</SenderId>
                <ReceiverId>GER</ReceiverId>
                <TrackingNumber>45</TrackingNumber>
                <ServerName>trewds</ServerName>
                <ResponseType>success</ResponseType>
                <StatusInfo>
                <Status>success</Status>
                <SystemMessage>Hagert</SystemMessage>
                <UserMessage>Hgert</UserMessage>
                <Origination>htref</Origination>
                </StatusInfo>
            </ns4:grtHgetRed>
        </S:Body>
    </S:Envelope>

我试图在Unix shell脚本中使用xmllint从它获取ResponseType节点值成功,所以我尝试了以下内容:

echo "cat //*[local-name()='S:Envelope'/*[local-name()='S:Body']/*[local-name()='ns4:grtHgetRed']/*[local-name()='ResponseType']" | xmllint --shell Det
.xml | sed '/^/ >/d' | sed 's/<[^>]*.//g'

但它不起作用.我在unix环境中也没有xpath.任何人都可以告诉我这里我做错了什么吗?

local-name()只是冒号之后的位,所以不是例如local-name()=’S:Envelope’尝试local-name()=’Envelope’.
/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='grtHgetRed']/*[local-name()='ResponseType']

或者您可能想要考虑一种替代工具,例如xmlstarlet,它可以更好地支持这种事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读