我无法用选择工具生成所需的结果。但是,我确实设法修改了生成的XSL以满足您的需要。
我用
-C
开关:
xmlstarlet sel -C -t -m "//*[contains(text(), 'SNAPSHOT')]" -m 'ancestor-or-self::*' -v 'name()' -o / -n
输出:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version="1.0" extension-element-prefixes="exslt">
<xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="//*[contains(text(), 'SNAPSHOT')]">
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="value-of-template">
<xsl:with-param name="select" select="name()"/>
</xsl:call-template>
<xsl:text>/</xsl:text>
<xsl:value-of select="' '"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template name="value-of-template">
<xsl:param name="select"/>
<xsl:value-of select="$select"/>
<xsl:for-each select="exslt:node-set($select)[position()>1]">
<xsl:value-of select="' '"/>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
然后我应用了以下补丁:
11d10
< <xsl:value-of select="' '"/>
12a12,13
> <xsl:value-of select="text()"/>
> <xsl:value-of select="' '"/>
导致:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" version="1.0" extension-element-prefixes="exslt">
<xsl:output omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:for-each select="//*[contains(text(), 'SNAPSHOT')]">
<xsl:for-each select="ancestor-or-self::*">
<xsl:call-template name="value-of-template">
<xsl:with-param name="select" select="name()"/>
</xsl:call-template>
<xsl:text>/</xsl:text>
</xsl:for-each>
<xsl:value-of select="text()"/>
<xsl:value-of select="' '"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="value-of-template">
<xsl:param name="select"/>
<xsl:value-of select="$select"/>
<xsl:for-each select="exslt:node-set($select)[position()>1]">
<xsl:value-of select="' '"/>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
如果将此转换应用于原始XML文件,将得到所需的结果:
xmlstarlet tr modified.xsl input.xml
输出:
project/version/0.2-SNAPSHOT
project/dependencies/dependency/version/4.12-SNAPSHOT
project/properties/jackson.version/1.9.13-SNAPSHOT
project/properties/guava.version/20.0-SNAPSHOT