我有一个包含多个节点的xml文档,如下所示:
<Result>
<Url>http://www.mysite.com/Topic/1/</Url>
</Result>
<Result>
<Url>http://www.mysite.com/Topic/2/</Url>
</Result>
<Result>
<Url>http://www.mysite.com/Topic/3/</Url>
</Result>
我想要做的是在所有节点的“主题/”之后检索主题ID。对于上面的示例,我正在寻找值1,2和3.我可以想到其他方法,但我想知道是否有办法使用XPath吗?
答案 0 :(得分:2)
您可以使用substring-after与substring-before配对,只提取数字
这是表达式
substring-before(substring-after(.,'http://www.mysite.com/Topic/'),'/')
鉴于您的输入(我添加了一个根节点以使其成为vaild)
<xml>
<Result>
<Url>http://www.mysite.com/Topic/1/</Url>
</Result>
<Result>
<Url>http://www.mysite.com/Topic/2/</Url>
</Result>
<Result>
<Url>http://www.mysite.com/Topic/3/</Url>
</Result>
</xml>
此转换说明了您想要的结果
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Url">
<Topic>
<xsl:value-of select="substring-before(substring-after(.,'http://www.mysite.com/Topic/'),'/')"/>
</Topic>
</xsl:template>
</xsl:stylesheet>
输出
<xml>
<Result>
<Topic>1</Topic>
</Result>
<Result>
<Topic>2</Topic>
</Result>
<Result>
<Topic>3</Topic>
</Result>
</xml>
根据上下文,您应该将上面表达式中的.
替换为访问节点所需的路径。
答案 1 :(得分:0)
使用字符串函数substring-after
,如下所示:
substring-after(string(.),'http://www.mysite.com/Topic/')
这将返回1/