我想使用 xmlstarlet 选择一个巨大的 .xml 文件的一些记录。我的问题是,我需要输出是有效的 XML。
最小示例:
使用 xmlstarlet sel -t -c "//record[@type='TypeA']" frage.xml
在包含以下内容的文件 frage.xml 上:
<?xml version="1.0" encoding="UTF-8"?>
<records>
<record type="TypeA">uqw8hY7V</record>
<record type="TypeB">bN4mT0zL</record>
<record type="TypeA">K6p4gJv2</record>
<record type="TypeB">z8wQ9xV1</record>
<record type="TypeA">a3rL7kY9</record>
<record type="TypeB">m1W2pX4e</record>
<record type="TypeA">y8T6r5zQ</record>
<record type="TypeB">k9pJ2wT3</record>
<record type="TypeA">d7V1gL5b</record>
<record type="TypeB">t4Y6n0pM</record>
</records>
输出:
<record type="TypeA">uqw8hY7V</record><record type="TypeA">K6p4gJv2</record><record type="TypeA">a3rL7kY9</record><record type="TypeA">y8T6r5zQ</record><record type="TypeA">d7V1gL5b</record>
虽然我希望有一些 NL,但我的问题是,没有根节点,这使得处理输出变得不舒服,因为我想要使用的软件需要有效的 XML。
有没有办法让 xmlstarlet 为输出放置根节点?
也许您应该删除而不是选择?例如:
xmlstarlet ed -d '//record[@type != "TypeA"]' frage.xml
输出:
<?xml version="1.0" encoding="UTF-8"?>
<records>
<record type="TypeA">uqw8hY7V</record>
<record type="TypeA">K6p4gJv2</record>
<record type="TypeA">a3rL7kY9</record>
<record type="TypeA">y8T6r5zQ</record>
<record type="TypeA">d7V1gL5b</record>
</records>