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>

「hostname」や「ip」の値を抽出せずに「host」の値だけを抽出したいと思います。出力は次のようになります。

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)]ここでも大丈夫だと思います)。

関連情報