Command-Line
通過mac os終端搜尋沒有特定標籤的.xml文件
如果您對以下內容提出建議,我將不勝感激。
文件夾名稱為“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
.