如果在perl中使用XML :: LIB不存在特定的子节点,则提取父节点

时间:2012-10-25 08:39:14

标签: perl xpath

例如,我的XML代码是:

<part> 
      <name>qwe</name>
      <ir>
          <d>yes</d>
          <scalar>
              <left>31</left>
              <right>0</right>
          </scalar>
      </ir>
</part>
<part> 
      <name>qaz</name>
      <ir>
          <d>yes</d>
          <scalar>
              <left>1</left>
              <right>0</right>
          </scalar>
      </ir>
</part>
<part>
      <name>asd</name>
      <ir>
          <d>yes</d>
          <drive>
              <default>1</default>
          </drive>
      </ir>
</part>
<part> 
      <name>zxc</name>
      <ir>
          <d>no</d>
          <scalar>
              <left>3</left>
              <right>0</right>
          </scalar>
          <drive>
              <default>0</default>
          </drive>
      </ir>
</part>

我想提取所有没有节点默认值的名称,即在此示例中输出应为qwe, qaz。您必须检查默认值的值(如果它是0或1)并打印asd默认值为0 zzxc默认值为1. qwe如果不存在则打印qaz没有默认值,{{1}}没有默认值。

1 个答案:

答案 0 :(得分:2)

如果默认值始终为ir/drive,则可以使用以下XPath表达式:

//part[not(ir/drive/default)]/name/text()