xmlstarlet不工作与纯ASCII xml文件预期?



创建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

最新更新