xml - 如何在 Linux 中解析相同命名的 XML 元素内容?

标签 xml linux parsing

大家好。我正在尝试编写一个编辑 xml 文件的脚本。不幸的是,文件中有相同的命名标签:

<phase1>
 <ikeid>1</ikeid>
 <iketype>ikev1</iketype>
 <mode>main</mode>
 <myid_type>myaddress</myid_type>
 <myid_data/>
 <peerid_type>peeraddress</peerid_type>
 <peerid_data/>
 <lifetime>28800</lifetime>
 <pre-shared-key>lol</pre-shared-key>
</phase1>

<phase1>
 <ikeid>2</ikeid>
 <iketype>ikev1</iketype>
 <mode>main</mode>
 <myid_type>any</myid_type>
 <myid_data/>
 <peerid_type>address</peerid_type>
 <peerid_data/>
 <lifetime>20000</lifetime>
 <pre-shared-key>lel</pre-shared-key>
</phase1>

我需要分别访问这两个“phase1” block 并使用 xmllint 编辑它们。简而言之,我想要这样的输出:

<phase1>
 <ikeid>1</ikeid>
 <iketype>ikev1</iketype>
 <mode>main</mode>
 <myid_type>myaddress</myid_type>
 <myid_data/>
 <peerid_type>peeraddress</peerid_type>
 <peerid_data/>
 <lifetime>28800</lifetime>
 <pre-shared-key>lol</pre-shared-key>
</phase1>

<phase1>
 <ikeid> I EDITTED THIS PART</ikeid>
 <iketype>ikev1</iketype>
 <mode>THIS IS ALSO EDITTED</mode>
 <myid_type>any</myid_type>
 <myid_data/>
 <peerid_type>address</peerid_type>
 <peerid_data/>
 <lifetime>HELP</lifetime>
 <pre-shared-key>lel</pre-shared-key>
</phase1>

谢谢。

最佳答案

我想通了。如下所示:

xmllint --shell file.xml
cd /some/path/phase1[ikeid='1']/lifetime

此命令到达包含“ikeid”值 1 的“phase1”的“lifetime”元素。

关于xml - 如何在 Linux 中解析相同命名的 XML 元素内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51383745/

相关文章:

linux - ioctl 返回 -1,errno 设置为 EPERM

linux - 如何使用 gdbserver 进行远程调试?

java - 如何使用不同的标签解码 xml

php - 解析 html 表 tr 标签丢失

javascript - 附加到 DOM 时 XML 属性变为小写

android - 从 Android 应用程序中的 xml/csv 文件读取数据

XMLUnit Compare Xml 比较错误的节点

linux - 如何只提取 ELF 部分的原始内容?

python - 如何防止 LXML 错误 'failed to load external entity'

android - 根据显示方向更改 XML 填充属性