如何在不通过xmlstarlet遍历的情况下提取特定节点值

如何在不通过xmlstarlet遍历的情况下提取特定节点值
<xml>
    <email>[email protected]</email>
    <email>[email protected]</email>
    <email>[email protected]</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,所以请耐心等待。任何帮助将不胜感激!

答案1

host您可以打印没有属性的 XPATH的值hostname

$ 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)]在这里同样会做得很好)。

相关内容