Xml 解析curl输出命令行

Xml 解析curl输出命令行,xml,bash,curl,Xml,Bash,Curl,响应curl命令curl-ik-umax:pass-xget-i-H“Content-Type:application/xml”https://1.2.3.4:943/cloud/rest/projects我得到了一个巨大的xml,其中包含许多类似于以下内容的实体 <project xlink:href="https://1.2.3.4:943/cloud/projects/13389/" > <approvedservers xlink:href="h

响应curl命令
curl-ik-umax:pass-xget-i-H“Content-Type:application/xml”https://1.2.3.4:943/cloud/rest/projects
我得到了一个巨大的xml,其中包含许多类似于以下内容的实体

<project xlink:href="https://1.2.3.4:943/cloud/projects/13389/" >
            <approvedservers xlink:href="https://1.2.3.4:943/cloud/projects/13389/approvedservers/" ></approvedservers>
            <requestUser>maxadmin</requestUser>
            <removed xlink:href="https://1.2.3.4:943/cloud/projects/13389/removed/" ></removed>
            <rejected>false</rejected>
            <pending xlink:href="https://1.2.3.4:943/cloud/rest/projects/13389/pending/" ></pending>
            <name>4BSm3ZQ1T6q7xBR2xT2PdQ</name>
            <servers xlink:href="https://1.2.3.4:943/cloud/rest/projects/13389/servers/" ></servers>
            <ticketId>ticketId</ticketId>
            <approved>true</approved>
            <history xlink:href="https://1.2.3.4:943/cloud/rest/projects/13389/history/" ></history>
            <startTime>1502214154651</startTime>
            <requestedServerCount>1</requestedServerCount>
            <applicationid>4336525</applicationid>
            <provision>provision</provision>
            <customer>None</customer>
            <endTime>253402300740000</endTime>
        </project>

maxadmin
错误的
4BSm3ZQ1T6q7xBR2xT2PdQ
ticketId
符合事实的
1502214154651
1.
4336525
提供
没有一个
253402300740000

如何解析此输出以获取所有URL中相同的项目ID
https://1.2.3.4:943/cloud/rest/projects/13389/pending/
基于
4BSm3ZQ1T6q7xBR2xT2PdQ
。基本上,我想找到用户名的项目id。

您可以使用
xmlstarlet
搜索所有
name
元素,其中包含所需文本作为值,然后输出兄弟元素
pending
(使用
。/pending/@href:xlink
,这意味着“上一级,然后是元素
挂起
,然后是属性
xlink:href
):


是否可以将内容类型设置为
json
,这样就可以使用
jq
轻松解析?您能否尝试使用
“内容类型:application/json”
?使用此答案,您可以在xpath中指定条件:
-v//project[name='$name']/@xlink:href“
@glennjackman是的,这样更好。如果我不每天使用
xmlstarlet
,我会忘记一切:-)太正确了。每次我都要做
xmlstarlet sel--help | less
。等你开始使用…@glennjackman哦,
jq
这个工具可以让
xmlstarlet
和退出
vim
看起来很简单:-)-这就是我左边头发的来源。。。
xmlstarlet sel -t  --match '//name[text() = "4BSm3ZQ1T6q7xBR2xT2PdQ"]' -v "../pending/@xlink:href"   file.xml