子串 - 忽略未知

时间:2017-08-30 14:33:10

标签: xml xslt xpath

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作为输出,但我没有。

1 个答案:

答案 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个标记的通用模板。