我希望使用XPath1.0获得最新快照的发布号。在本例中,它将是0.0.3-快照。
<html>
<head><title>Title</title>
</head>
<body>
<h1>Index </h1>
<pre>Name </pre><hr/>
<pre><a href="../">../</a>
<a href="0.0.1-SNAPSHOT/">0.0.1-SNAPSHOT/</a>
<a href="0.0.2-SNAPSHOT/">0.0.2-SNAPSHOT/</a>
<a href="0.0.3-SNAPSHOT/">0.0.3-SNAPSHOT/</a>
<a href="metadata.xml">metadata.xml</a>
</pre>
</body></html>我是用
xpath snapshot.xml "(//a)[last()-1]"我不习惯于假设快照版本的最高值总是位于最后()-1-快照的索引位置。
我可以假设值(0.0.1,0.0.2)总是从文档的顶部到底部递增。
我想编写一个xpath表达式来执行以下操作
1)解析完整节点集,仅返回包含字符串快照的锚链接。
预期结果
> 0.0.1-SNAPSHOT/
> 0.0.2-SNAPSHOT/
> 0.0.3-SNAPSHOT/I was successful.There是几种使用谓词进行此操作的方法
xpath snapshot.xml "(//pre/a/text()包含(.,‘snapshot.xml’)“xpath snapshot.xml”(//a/snapshot.xml)包含(.,‘快照’)“
但是,返回的节点太多了,所以我想通过以下两种方法进行筛选
( 2a)获取集合中的最后一个节点,这似乎是不可能的,因为because ()返回字符串而不是节点集
我就这样失败了
xpath snapshot.xml "(//a)[contains(text(),'SNAPSHOT')last()]"
xpath snapshot.xml "(//a)[contains(text(),'SNAPSHOT')][last()]"
xpath snapshot.xml "(//a)[not ( contains(text(),'SNAPSHOT') ) < text()]"2b)获取具有最高值的节点。这意味着如果字符串为“0.0.3 -快照”,则在-SNAPSHOT之前选择子字符串0.0.1、0.0.2和0.0.3并获得最大值。
然后我就这样失败了
xpath snapshot.xml "(//a)[ not(../a/text() > text()) ]"我正在使用https://www.w3.org/TR/xpath作为指导。
如何筛选使用XPath1.0返回的节点集中子字符串的最高值。这个案子有可能吗?
发布于 2016-03-31 00:45:03
选择包含文本'SNAPSHOT'的最后一个'SNAPSHOT'元素实际上是可行的,并且适用于特定的'SNAPSHOT'示例。只有尝试过的XPath中的括号略差,请尝试这样做:
(//a[contains(text(),'SNAPSHOT')])[last()]发布于 2016-03-30 17:25:25
您可以通过对@href属性进行词法排序来实现这一点。因为数字在词汇上排列得很好,所以这是可能的。应用xsl:sort对@href属性进行降序排序,很好地对版本进行排序,提取第一个元素将给出所需的结果。剩下的只是表面而已。所以试试这个:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="text()" />
<xsl:template match="/html/body/pre">
<xsl:value-of select="' '" />
<xsl:variable name="highest">
<xsl:for-each select="a[substring(@href,1,1) > 0 or substring(@href,1,1) < 10]">
<xsl:sort select="@href" order="descending" />
<r><xsl:value-of select="normalize-space(.)" /></r>
</xsl:for-each>
</xsl:variable>
<xsl:if test="$highest != ''">
<xsl:value-of select="concat('Latest version is: ',$highest/r[1],' ')" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>但这只适用于一个数字的版本号。对于几个数字版本号,一个不同的方法是必要的。
https://stackoverflow.com/questions/36315209
复制相似问题