我正在尝试查找没有有效数据的xml,并且不对其进行处理。例如,下面是一个正确的xml,其中包含需要处理的所有可用数据
(用于从xml文件读取数据的循环Xpath-开票/发票/序列号/序列号):
<?xml version='1.0' encoding='UTF-8'?>
<Invoicing>
<Invoice>
<VendorName>Contec</VendorName>
<InvoicePeriod>May</InvoicePeriod>
<InvoiceDt>2019-05-11</InvoiceDt>
<InvoiceNo>20190511</InvoiceNo>
<Serials>
<SerialNumber>
<TestLoc>HNMA01</TestLoc>
<EISSerial>PKQPLPXJC</EISSerial>
<ComcastModel>PX022ANC</ComcastModel>
<RMANo />
<ReceiptDt>05/09/2019</ReceiptDt>
<RepairDt>05/11/2019</RepairDt>
<Parts>
<Part>
<PartType>Cosmetic</PartType>
<PartId>SERVICEBUFFING</PartId>
<PartDescr>BUFF SERVC</PartDescr>
<ActionCd>RA003</ActionCd>
<FSC>FS005</FSC>
</Part>
</Parts>
</SerialNumber>
</Serials>
</Invoice>
</Invoicing>
我还获得了以下格式的XML
<?xml version="1.0" encoding="UTF-8"?>
<Invoicing>
<Invoice>
<VendorName>Contec</VendorName>
<InvoicePeriod>May</InvoicePeriod>
<InvoiceDt>2017-05-01</InvoiceDt>
<InvoiceNo>20170501</InvoiceNo>
<Serials></Serials>
</Invoice>
</Invoicing>
上面的xml即使有效也是不正确的。我想识别没有完整数据的第二种格式的xml,并将它们移到错误文件夹中。
谢谢, 凯文(Kavin)
答案 0 :(得分:0)
此问题的解决方案如下:
通过@EdMorton提供的解决方案,我能够实现我想要的。
grep -L '<SerialNumber>' *.xml
但是我想使用xml解析器来完成此操作。
count=$(xmllint --xpath "count(//SerialNumber)" "$xml")
当计数为零时,我已经实现了我的逻辑。
感谢所有帮助。