识别具有特定格式的所有xml文件

时间:2019-05-14 03:30:42

标签: shell unix

我正在尝试查找没有有效数据的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)

1 个答案:

答案 0 :(得分:0)

此问题的解决方案如下:

通过@EdMorton提供的解决方案,我能够实现我想要的。

grep -L '<SerialNumber>' *.xml

但是我想使用xml解析器来完成此操作。

count=$(xmllint --xpath "count(//SerialNumber)" "$xml")

当计数为零时,我已经实现了我的逻辑。

感谢所有帮助。