如果缺少某个值,我想删除大型xml文件中的某些元素。
我找到了一个主题,其中说明了如何提取值存在的元素,而不是相反。解决方案可以是sed或xmlstartlet,但我无法弄清楚。
xmlstarlet ed -d '//eslXmlDto[.//itemAssociations]' < file1.xml >> file2.xml
这是我的文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<screens>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2017-04-25T12:23:18.746+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>16201000032884264000</screenCode>
<itemAssociations>
<itemCode>2118550000000</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2016-07-27T03:59:17.328+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>17201000030538183370</screenCode>
</screenXmlDto>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2016-07-26T12:28:20.815+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>17201000030538091000</screenCode>
<itemAssociations>
<itemCode>4008033444958</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
</screens>
这是我想要的输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<screens>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2017-04-25T12:23:18.746+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>16201000032884264000</screenCode>
<itemAssociations>
<itemCode>2118550000000</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2016-07-26T12:28:20.815+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>17201000030538091000</screenCode>
<itemAssociations>
<itemCode>4008033444958</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
</screens>
答案 0 :(得分:0)
xmlstarlet
解决方案:
xmlstarlet ed -d '//screenXmlDto[not(itemAssociations)]' file1.xml
-d
- 删除操作//screenXmlDto[not(itemAssociations)]
- xpath表达式,用于选择作为子节点没有screenXmlDto
个节点的所有itemAssociations
个节点输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<screens>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2017-04-25T12:23:18.746+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>16201000032884264000</screenCode>
<itemAssociations>
<itemCode>2118550000000</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
<screenXmlDto>
<articleCodeType>EAN</articleCodeType>
<creationDate>2016-07-26T12:28:20.815+02:00</creationDate>
<domain>toto.tata</domain>
<screenCode>17201000030538091000</screenCode>
<itemAssociations>
<itemCode>4008033444958</itemCode>
<position>1</position>
</itemAssociations>
</screenXmlDto>
</screens>