linux - 如何使用 shell 脚本解析 xml 并获取值
问题描述
我有以下xml,
<?xml version="1.0" encoding="UTF-8"?>
<power-domains>
<power-domain name="Security" cache-type="default">
<authentication>
<login-module code="test.module" flag="required" module="com.test.nms">
<module-option name="principal" value="admin"/>
<module-option name="userName" value="admin"/>
<module-option name="password" value="YSFSDwe"/>
</login-module>
</authentication>
</power-domain>
</power-domains>
通过使用shell脚本,我需要解析上述内容并获取用户名和密码的值吗?
请指导我该怎么做?
解决方案
您可以使用此xmlstarlet命令提取值:
xmlstarlet sel -t \
-v '//module-option[@name = "userName"]/@value' \
-nl \
-v '//module-option[@name = "password"]/@value' \
file.xml
并且,假设您的 shell 是 bash,要将这些值读入 shell 变量,请使用Process Substitution:
{
IFS= read -r userName
IFS= read -r password
} < <(
xmlstarlet sel -t -v '//module-option[@name = "userName"]/@value' -nl -v '//module-option[@name = "password"]/@value' file.xml
)
echo "$userName"; echo "$password"
admin
YSFSDwe
推荐阅读
- json - 有什么方法可以在 2019 年获取 facebook 页面的 json?
- python - AttributeError:“SequenceGenerator”对象没有属性“形状”自定义序列生成器 Keras 2.2.4
- html - 使 IMG 上的 CSS 三角形响应式
- google-apps-script - 如何在发布前测试 Google 编辑器插件?
- keras - 将学习从关系提取转移到仇恨检测,有意义吗?
- php - 读取和更新 woocommerce_product_on_backorder 挂钩中的自定义字段
- r - 为绘图添加图例
- c++ - SFML 和 Box2D SetUserData 无法将参数从 const char [4] 转换为 void *
- wpf - 如何在命令 wpf 中传递文本框 KeyEventArgs 和文本框值
- node.js - 使用Nodejs将包含图像的对象上传到Mongodb?