xmlstarlet 总是计数 0
xmlstarlet always count 0
为了实现一个脚本导入到我的数据库中,我想统计xml文件中节点的迭代次数。
我尝试使用 xmlstarlet,但每次他返回 0 作为答案...
这是我的 XML 文件的示例:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<global xmlns="http://www.xxxxxxxxxxx">
<place geoAccuracy="0" geoStatus="0" geoLatDeg="0.0" geoLongDeg="0.0" id="123">
<name>XXXXXX</name>
<postalcode>12345</postalcode>
<city>city</city>
<country>country</country>
</place>
<place geoAccuracy="0" geoStatus="0" geoLatDeg="0.0" geoLongDeg="0.0" id="123">
<name>XXXXXX</name>
<postalcode>12345</postalcode>
<city>city</city>
<country>country</country>
</place>
在我的 bash 中,我这样做了 :
#!/bin/bash
FILE="places.xml" RESULT=$(xmlstarlet sel -t -v "count(//place)" $FILE)
echo $RESULT
每次,结果都是 returns 0...我尝试了不同的 XPath,例如“//global/place”或“/place”,但结果是一样的...
有没有人知道如何解决它?
我正在使用 Ubuntu 服务器 14.04LTS。
@O.R.Mapper 是正确的:使用 xmlstarlet
:
时必须指定名称空间
xmlstarlet sel -N q="http://www.xxxxxxxxxxx" -t -v 'count(//q:place)' "$FILE"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
对我有用(returns 2,前提是我将 </global>
添加到您提供的测试样本的末尾)。
q
是您将用来引用命名空间的名称,http...x
是 XML 文件中的 xmlns
值。然后每个标签名前面都加了q:
来指定命名空间。除了 q
,您还可以使用您想要引用命名空间的任何 ID — URL 定义了命名空间,而不是引用。
来自 the docs.
为了实现一个脚本导入到我的数据库中,我想统计xml文件中节点的迭代次数。 我尝试使用 xmlstarlet,但每次他返回 0 作为答案...
这是我的 XML 文件的示例:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<global xmlns="http://www.xxxxxxxxxxx">
<place geoAccuracy="0" geoStatus="0" geoLatDeg="0.0" geoLongDeg="0.0" id="123">
<name>XXXXXX</name>
<postalcode>12345</postalcode>
<city>city</city>
<country>country</country>
</place>
<place geoAccuracy="0" geoStatus="0" geoLatDeg="0.0" geoLongDeg="0.0" id="123">
<name>XXXXXX</name>
<postalcode>12345</postalcode>
<city>city</city>
<country>country</country>
</place>
在我的 bash 中,我这样做了 :
#!/bin/bash
FILE="places.xml" RESULT=$(xmlstarlet sel -t -v "count(//place)" $FILE)
echo $RESULT
每次,结果都是 returns 0...我尝试了不同的 XPath,例如“//global/place”或“/place”,但结果是一样的...
有没有人知道如何解决它? 我正在使用 Ubuntu 服务器 14.04LTS。
@O.R.Mapper 是正确的:使用 xmlstarlet
:
xmlstarlet sel -N q="http://www.xxxxxxxxxxx" -t -v 'count(//q:place)' "$FILE"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
对我有用(returns 2,前提是我将 </global>
添加到您提供的测试样本的末尾)。
q
是您将用来引用命名空间的名称,http...x
是 XML 文件中的 xmlns
值。然后每个标签名前面都加了q:
来指定命名空间。除了 q
,您还可以使用您想要引用命名空间的任何 ID — URL 定义了命名空间,而不是引用。
来自 the docs.