使用 xmlstarlet 或 xmllint 获取属性值
get attribute value using xmlstarlet or xmllint
自从过去两天以来,我已经解决了几个问题,但尚未找到解决方案。这是我的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<Environment xmlns="http://schemas.dmtf.org/ovf/environment/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oe="http://schemas.dmtf.org/ovf/environment/1" xmlns:ve="http://www.vmware.com/schema/ovfenv" oe:id="" ve:vCenterId="">
<PropertySection>
<Property oe:key="vami.hostname" oe:value="jal"/>
<Property oe:key="vamitimezone" oe:value="Asia/Kolkata"/>
<Property oe:key="ABC_enable" oe:value="1"/>
<Property oe:key="software_only_installer_name" oe:value="install-r8-0-0-0"/>
<Property oe:key="software_only_staging_dir" oe:value="/media/dir"/>
<Property oe:key="software_only_mount_dir" oe:value="/media/cdrom"/>
</PropertySection>
</Environment>
我想在 oe:key="ABC_enable" 时获取属性值 (oe:value)。
我用 xmllint 和 xmlstarlet 尝试了很多次,但无法得到我想要的。
你能帮忙吗?
所以我能够通过 awk 完成此操作。
awk '/ABC_enable/{print }' FS='"' xmlfile.xml
这对我有用,因为 "ABC_enable" 将在此文件中只出现一次,并且格式将始终保持不变。我知道这个解决方案不能通用,但它可以完成我的工作。
使用xmlstarlet
工具的正确方法:
xmlstarlet sel -N oe="http://schemas.dmtf.org/ovf/environment/1" \
-N ve="http://www.vmware.com/schema/ovfenv" --net -t -v \
'//oe:Property[@oe:key="ABC_enable"]/@oe:value' -n input.xml
输出:
1
自从过去两天以来,我已经解决了几个问题,但尚未找到解决方案。这是我的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<Environment xmlns="http://schemas.dmtf.org/ovf/environment/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oe="http://schemas.dmtf.org/ovf/environment/1" xmlns:ve="http://www.vmware.com/schema/ovfenv" oe:id="" ve:vCenterId="">
<PropertySection>
<Property oe:key="vami.hostname" oe:value="jal"/>
<Property oe:key="vamitimezone" oe:value="Asia/Kolkata"/>
<Property oe:key="ABC_enable" oe:value="1"/>
<Property oe:key="software_only_installer_name" oe:value="install-r8-0-0-0"/>
<Property oe:key="software_only_staging_dir" oe:value="/media/dir"/>
<Property oe:key="software_only_mount_dir" oe:value="/media/cdrom"/>
</PropertySection>
</Environment>
我想在 oe:key="ABC_enable" 时获取属性值 (oe:value)。
我用 xmllint 和 xmlstarlet 尝试了很多次,但无法得到我想要的。 你能帮忙吗?
所以我能够通过 awk 完成此操作。
awk '/ABC_enable/{print }' FS='"' xmlfile.xml
这对我有用,因为 "ABC_enable" 将在此文件中只出现一次,并且格式将始终保持不变。我知道这个解决方案不能通用,但它可以完成我的工作。
使用xmlstarlet
工具的正确方法:
xmlstarlet sel -N oe="http://schemas.dmtf.org/ovf/environment/1" \
-N ve="http://www.vmware.com/schema/ovfenv" --net -t -v \
'//oe:Property[@oe:key="ABC_enable"]/@oe:value' -n input.xml
输出:
1