xmlstarlet根据属性选择值



使用以下文件.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config>
<index type="I8">
<book>2</book>
</index>
</config>

我无法选择带有的书籍

xmlstarlet sel --template --match /config/index[@type="I8"] -c . file.xml

我无法选择带有的书籍

xmlstarlet sel --template --match /config/index[@type='I8'] -c . file.xml

我可以选择带有的书籍

xmlstarlet sel --template --match "/config/index[@type='I8']" -c . file.xml

我可以选择带有的书籍

xmlstarlet sel --template --match '/config/index[@type="I8"]' -c . file.xml

此外,如果类型在xml中为type="8",我可以使用选择它

xmlstarlet sel --template --match /config/index[@type="8"] -c . file.xml

为什么?

xmlstarlet 1.6.1
compiled against libxml2 2.9.4, linked with 20904
compiled against libxslt 1.1.29, linked with 10129

这个可以工作(在Windows和Ubuntu上测试(:

xmlstarlet sel -t -i /config/index/@type="I8" -m //book -c . -b file.xml

这与引用有关,当查看下一条语句的输出时,您可以看到原因:

xmlstarlet sel -C --template --match /config/index[@type="I8"] -c . file.xml

它的输出:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="/config/index[@type=I8]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

其在CCD_ 1周围缺少引号。

最新更新