【问题标题】:Getting values by using xmlstarlet or xmllint with libxml version 20706通过使用带有 libxml 版本 20706 的 xmlstarlet 或 xmllint 获取值
【发布时间】:2021-02-18 21:58:04
【问题描述】:

这是我的xml的一部分;

          <LOGICAL_DRIVE>
                <LABEL VALUE = "01"/>
                <STATUS VALUE = "Degraded"/>
                <CAPACITY VALUE = "99 GiB"/>
                <FAULT_TOLERANCE VALUE = "RAID 1/RAID 1+0"/>
                <LOGICAL_DRIVE_TYPE VALUE = "Data LUN"/>
                <ENCRYPTION_STATUS VALUE = "Not Encrypted"/>
                <PHYSICAL_DRIVE>
                     <LABEL VALUE = "Port 1I Box 1 Bay 1"/>
                     <STATUS VALUE = "OK"/>
                     <MODEL VALUE = "MM1000GBKAL"/>
                     <CAPACITY VALUE = "931 GiB"/>
                     <MARKETING_CAPACITY VALUE = "1000 GB"/>
                     <LOCATION VALUE = "Port 1I Box 1 Bay 1"/>
                     <FW_VERSION VALUE = "HPGE"/>
                     <DRIVE_CONFIGURATION VALUE = "Configured"/>
                     <ENCRYPTION_STATUS VALUE = "Not Encrypted"/>
                     <MEDIA_TYPE VALUE = "HDD"/>
                </PHYSICAL_DRIVE>
                <PHYSICAL_DRIVE>
                     <LABEL VALUE = "Port 2I Box 1 Bay 5"/>
                     <STATUS VALUE = "FAILED"/>
                     <MODEL VALUE = "MM1000GBKAL"/>
                     <CAPACITY VALUE = "931 GiB"/>
                     <MARKETING_CAPACITY VALUE = "1000 GB"/>
                     <LOCATION VALUE = "Port 2I Box 1 Bay 5"/>
                     <FW_VERSION VALUE = "HPGE"/>
                     <DRIVE_CONFIGURATION VALUE = "Configured"/>
                     <ENCRYPTION_STATUS VALUE = "Not Encrypted"/>
                     <MEDIA_TYPE VALUE = "HDD"/>
                </PHYSICAL_DRIVE>
           </LOGICAL_DRIVE>
           <LOGICAL_DRIVE>

我想获取 LOGICAL_DRIVE 的 STATUS 的 VALUE 不正常的 LABEL 的 VALUE。

我正在使用以下内容;

xmllint --xpath "//LOGICAL_DRIVE[.//STATUS[not(@VALUE='OK')]]/LABEL[@VALUE]" health.xml

但是,我有一个旧版本的系统,我无法更新它。这个我试过了;

xmlstarlet sel -t -m "//PHYSICAL_DRIVE/STATUS/@value='OK']" -v "../LABEL/text()" -nl health.xml

但它没有用。在这个版本的xml中,如果LOGICAL_DRIVE的STATUS的VALUE不OK,如何获取LABEL的VALUE?

提前致谢

【问题讨论】:

  • 您确定您的意思是“LOGICAL_DRIVE 的状态不正常”吗?在您的示例中,逻辑驱动器的状态为“降级”。您是指物理驱动器的状态吗?

标签: xml xpath xml-parsing xmlstarlet xmllint


【解决方案1】:

这是一个应该可以工作的 xmlstarlet 命令:

xmlstarlet sel -T -t -m "//PHYSICAL_DRIVE[not(STATUS/@VALUE='OK')]/LABEL" -v "@VALUE" -nl health.xml

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 2017-04-28
    • 2023-02-20
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2017-01-10
    相关资源
    最近更新 更多