Xml

如何在不通過 xmlstarlet 遍歷的情況下提取特定節點值

  • November 18, 2020
<xml>
   <email>asdadw@cutshort.io</email>
   <email>sadfasd@cutshort.io</email>
   <email>asdas@cutshort.io</email>
   <host>
       <ip>56.456.155.423, 54.455.155.654, 544.47.745.80, 54.192.155.842</ip>
       <hostname>abc.cutshort.io</hostname>
   </host>
   <host>cdn.cutshort.io</host>
   <host>
       <ip>56.456.155.423, 54.455.155.654, 544.47.745.80, 54.192.155.842</ip>
       <hostname>abc.cutshort.io</hostname>
   </host>
   <host>www.cutshort.io</host>
   <host>blogdata.cutshort.io</host>
   <host>cdn.cutshort.io</host>
</xml>

我想提取“host”的值而不提取“hostname”或“ip”的值。輸出應該如下所示:

cdn.cutshort.io
www.cutshort.io
blogdata.cutshort.io
cdn.cutshort.io

我最近才開始 xml 解析所以請耐心等待。任何幫助將不勝感激!

您可以列印host沒有hostname屬性的 XPATH 的值:

$ xmlstarlet sel -t -v '//host[not(hostname)]' -n file.xml
cdn.cutshort.io
www.cutshort.io
blogdata.cutshort.io
cdn.cutshort.io

//host[not(ip)]在這裡也會做得很好)。

引用自:https://unix.stackexchange.com/questions/620194