创建xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Contents>
<Key>README</Key>
<LastModified>2018-09-27T16:04:24.616Z</LastModified>
<ETag>"00000000000000000000000000000000-1"</ETag>
<Size>94</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName/>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>file1.zip</Key>
<LastModified>2009-09-13T16:09:35.000Z</LastModified>
<ETag>"00000000000000000000000000000000-1"</ETag>
<Size>170486537</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName/>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<Contents>
<Key>file2.zip.torrent</Key>
<LastModified>2009-09-14T03:35:56.000Z</LastModified>
<ETag>"00000000000000000000000000000000-1"</ETag>
<Size>13884</Size>
<Owner>
<ID>02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4</ID>
<DisplayName/>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
现在尝试使用xmlstarlet:
提取xmlstarlet sel -t -c '//Key' dl.xml
不返回任何东西。对
xmlstarlet sel -t -c '/ListBucket/Result' dl.xml
唯一有效的选择是:
xmlstarlet sel -t -c '*' dl.xml
xmlstarlet sel -t -c '/*' dl.xml
xmlstarlet sel -t -c '//*' dl.xml
一旦我尝试选择像
这样的东西xmlstarlet sel -t -c '//Key' dl.xml
xmlstarlet sel -t -c '/ListBucketResult' dl.xml
不再给出输出。给出的文件(dl.xml)是纯ASCII。
xmlstarlet
报告版本1.6.1-2.1。在原始文件中大约有50000个Contents
节点,包含相同数量的Key
节点。
知道为什么它不像预期和描述的那样工作吗?这个文件是不是太大了,不能被xmlstarlet
处理?
您的文件使用了名称空间。我建议:
xmlstarlet select -N x="http://s3.amazonaws.com/doc/2006-03-01/"
--template --value-of '//x:Key' -n dl.xml
输出:
<>之前的自述file1.zipfile2.zip.torrent