我得到了一个包含 130k 行的 XML 文件。假设它包含大量标签,并且有重复的子标签。
<tag1>
<subtag1></subtag1>
<subtag2>something</subtag2>
</tag1>
...
...
<tag1>
<subtag1>something</subtag1>
<subtag2>something</subtag2>
</tag1>
并且所有行数都应相同。我想搜索整个文件(130k 行)以查找包含比应有行数多或少的行数的标签。哪种方法合适?现在使用 Notepad++。
答案1
此 XML
$ cat Petras.xml
<doc>
<tag1>
<subtag1></subtag1>
<subtag2>something</subtag2>
</tag1>
<tag1>
<subtag1>something</subtag1>
<subtag2>something</subtag2>
</tag1>
</doc>
可以根据此 XSD 进行验证
$ cat Petras.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="doc">
<xs:complexType>
<xs:sequence>
<xs:element name="tag1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="subtag1" type="xs:string" minOccurs="1"/>
<xs:element name="subtag2" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
例如,使用 xmllint
$ xmllint --schema Petras.xsd Petras.xml
<?xml version="1.0"?>
<doc>
<tag1>
<subtag1/>
<subtag2>something</subtag2>
</tag1>
<tag1>
<subtag1>something</subtag1>
<subtag2>something</subtag2>
</tag1>
</doc>
Petras.xml validates