获取找到搜索文本的 xml 节点

获取找到搜索文本的 xml 节点

我有一个格式良好且缩进的 xml,类似于下面的 xml。我需要获取带有文本的单声道标签“http://yahoo.com

<root>
<mono id="1">
<tag1>http://google.com</tag1>
</mono>
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="3">
<tag1>http://mysite.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
</root>

我正在尝试使用以下命令。

猫 -n 索引.xml | sed -n "/root/,/root>/p" | sed -n "/root/,/root>/p" |格列普“http://yahoo.com

6  <tag1>http://yahoo.com</tag1>
12  <tag1>http://yahoo.com</tag1>

我需要这样的输出。但不知道如何获取包含我的搜索文本的单节点。

<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>

答案1

使用XML小星:

$ xmlstarlet sel -t -c '//mono[tag1 = "http://yahoo.com"]' -nl file.xml
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono><mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>

XPath 的//mono[tag1 = "http://yahoo.com"]意思是“任何具有称为其值为”mongo的子节点的节点。意思是“给我一份……的副本”,最后在输出末尾插入换行符。tag1http://yahoo.com-c-nl

您想要id匹配节点的:

xmlstarlet sel -t -v '//mono[tag1 = "http://yahoo.com"]/@id' -nl file.xml

相关内容