Command-Line

通過mac os終端搜尋沒有特定標籤的.xml文件

  • August 17, 2022

如果您對以下內容提出建議,我將不勝感激。

文件夾名稱為“ABC”,其中包含數千個 .xml 文件。XML 的核心結構是相同的:

<product abcd…>
 <category>
 ...
 </category>
</product>

一些 xml 文件可以被認為是有效的,因為它們包含必需的<category>標籤)其中一些是無效的,因為必需的<category>標籤完全缺失。它甚至沒有關閉</category>

因此,目標是通過終端找到那些</category>放置在“ABC”文件夾中的 XML 中沒有標籤的“無效”xml。

任何機會?

假設所有 XML 文件都是格式正確的: 使用xmlstarlet,以下列印任何沒有category節點作為直接子節點的文件的輸入文件名product

xmlstarlet sel -t --if '/product/category' --else -f -nl ABC/*.xml

如果您只想檢測沒有任何category節點的文件:

xmlstarlet sel -t --if '//category' --else -f -nl ABC/*.xml

在這兩個命令中,xmlstarlet計算給定的 XPath 表達式。如果表達式計算為一組至少一個找到的節點,則--if測試為,不會發生其他任何事情。否則,將--else評估分支並-f -nl導致目前文件名與尾隨換行符一起輸出。

假設您想對缺少節點的文件做一些事情category,下面會設置一個循環,允許您處理相關文件:

for xml in ABC/*.xml; do
   if ! xmlstarlet sel -t --if '/product/category' -nl "$xml" >/dev/null
   then
       # process "$xml" here
   fi
done

在 macOS 上安裝xmlstarlet最好通過 Homebrew 完成。Homebrew 包被呼叫xmlstarlet,命令將被呼叫xml而不是xmlstarlet.

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