如果我有这样的源文件:
<animal name="fred_monkey" />
<animal name="jim_banana" />
<animal name="joe_monkey" />
Run Code Online (Sandbox Code Playgroud)
我可以在样式表中执行XPATH表达式,只选择名称中带有字符串'_monkey'的动物吗?
例如,通配符'*_monkey'?
Dim*_*hev 29
我可以在样式表中执行XPATH表达式,只选择名称中带有字符串'_monkey'的动物吗?
例如,通配符'*_monkey'?
此通配符表示以 "_monkey" 结尾的字符串,而不是包含 "_monkey" 的字符串.
用途:
//animal[ends-with(@name, '_monkey')]
Run Code Online (Sandbox Code Playgroud)
以上使用标准XPath 2.0功能ends-with(),因此仅在XSLT 2.0中可用.
在XSLT 1.0中,使用以下XPath 1.0表达式:
//animal[substring(@name, string-length(@name) -6)='_monkey']
Run Code Online (Sandbox Code Playgroud)
不建议使用//缩写,因为这可能导致评估效率低下.只要知道XML文档的结构,就使用更具体的位置测试链.例如,如果animal元素都是XML文档顶部元素的子元素,则以下XPath(分别为2.0或1.0)表达式可能更有效:
/*/animal[ends-with(@name, '_monkey')]
Run Code Online (Sandbox Code Playgroud)
和
/*/animal[substring(@name, string-length(@name) -6)='_monkey']
Run Code Online (Sandbox Code Playgroud)
根据自己的具体需求(例如,你真的意味着"包含"而不是"结尾"),该功能contains(),starts-with()并且substring()也可能是有用的:
contains(someString, someTargetString)
starts-with(someString, someTargetString)
substring(someString, start-index, length) = someTargetString
Run Code Online (Sandbox Code Playgroud)
最后,match属性<xsl:templates>不需要包含绝对XPath表达式 - 建议使用指定足够上下文的相对XPath表达式.
因此,上面用作匹配表达式将是:
<xsl:template match="animal[ends-with(@name, '_monkey')]">
Run Code Online (Sandbox Code Playgroud)
和
<xsl:template match=
"animal[substring(@name, string-length(@name) -6)='_monkey']">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22972 次 |
| 最近记录: |