Linux

如何驗證包含特定標籤的 XML

  • January 18, 2018

是否可以通過 xmllint 檢查 xml 是否包含以下標籤:

  1. 姓名
  2. uniq_String
  3. 版本

帶有三個標籤的 xml 範例:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- tasks configuration file -->
<tasks>
  <Name>destry_srorage_luns</Name>
  <uniq_String>destry_srorage_luns run once at day</uniq_String>
   <Version>14.03.23</Version>

如果不使用xmllint

使用 awk/sed/perl oneliner 在 xml 中定義檢查標籤的其他替代方法是什麼?

如果 xml 包含兩個標籤 - Name , uniq_String , Version 的預期輸出

XML_VALID=TRUE

xml 不包含兩個標籤的預期輸出 - Name , uniq_String , Version

XML_VALID=FALSE

**Xmlstarlet**解決方案:

if xmlstarlet sel -Q -t -c "//*[Name and uniq_String and Version]" input.xml; then
   echo "XML_VALID=TRUE"
else 
   echo "XML_VALID=FALSE"
fi

http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139652416


**xmllint**替代解決方案:

if xmllint --xpath "//*[Name and uniq_String and Version]" input.xml &>/dev/null; then
   echo "XML_VALID=TRUE"
else 
   echo "XML_VALID=FALSE"
fi

引用自:https://unix.stackexchange.com/questions/417932