0
我有这个简单的xml文件。我知道sed或awk不是最好的选择,但我仅限于使用这些。如果内部标记存在,则提取外部标记信息
<testcase classname="i1" name="item1"/>
<testcase classname="i2" name="item2">
<failure message="value2">
</failure>
</testcase>
<testcase classname="i3" name="item3"/>
正如你所看到的,有些是自关闭(如第1项,第3项)和一些含有<failure>
标签。
我想获得第一个testcase标签的name
属性,当且仅当内部有<failure>
标签时。
此示例的预期结果应为item2
。
我用的是:
sed -rn 's#.*[<testcase].*[ ]name=[\"]([0-9a-zA-Z_]+)[\" ].*[<failure message=][\"]([0-9a-zA-Z_]+)[\" ].*[<\/failure>].*[<\/testcase>]#\1#p' file.xml
这实在不是一个正则表达式使用的智能,但有时我会有奇怪的结果。
我在正确的方向来解决这个问题吗? 谢谢!
编辑:添加className属性,因为选择的答案让我两个印刷行显示
i2
i2
代替item2
是的,这样做的工作...... O_O能否请您详细阐述申请有关这个代码?即为什么它解决了我的问题? – bomba6
添加说明信息。如果你喜欢它接受它:) – Jotne
谢谢Jotne,我会接受这一点。我更新了我的问题,因为我忘记了另一个包含字符串'name'的属性,并且我打印了两次这个值。 – bomba6