XML:
<param name="SomeName">
<path>'root.domain.sub1.sub2.sub3.subover9000'</path>
</param>
root.domain.
是静态值,sub1.sub2.sub3.subover9000
是动态值。我想在哪里选择sub2
值作为输出。
我的XSLTv1:
<xsl:variable name="Sysid" select="//@name[normalize-space(.) = 'SomeName']/parent::*"/>
<xsl:variable name="SSafter" select="substring-after( $Sysid, 'root.domain.')"/>
<xsl:variable name="SSbefore" select="substring-before( $SSafter, '.sub3.subover9000')"/>
<xsl:value-of select="$SSbefore"/>
输出:
sub1.sub2
问题是 - 我无法放弃sub1.
,因为它在不同的XML文件中是动态的,但我只需要sub2
。
那么我怎么能说忽略root.domain.
和下一个dot"."
之间的部分?
规则说:
表达式fn:substring-after(“abcdefghi”,“ - d-e-”, “http://www.w3.org/2013/collation/UCA?lang=en;alternate=blanked;strength=primary”) 返回“fghi”。
在我看来,这意味着,当我使用时:
<xsl:variable name="SSafter" select="substring-after( $Sysid, '--root.domain.-.-')"/>
我应该sub2
作为输出,但我没有。
答案 0 :(得分:0)
考虑以下示例:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="string">root.domain.sub1.sub2.sub3.subover9000</xsl:param>
<xsl:template match="/">
<result>
<xsl:value-of select="substring-before(substring-after(substring-after($string, 'root.domain.'), '.'), '.')"/>
</result>
</xsl:template>
</xsl:stylesheet>
<强>结果强>
<?xml version="1.0" encoding="UTF-8"?>
<result>sub2</result>
另请参阅:https://stackoverflow.com/a/33841806/3016153,了解用于从分隔字符串中提取第N个标记的通用模板。