我有点坚持试图获取包含特定字符串值的节点。使用 似乎很容易,node[contains(., X)]
但问题是这个公式我得到的节点不完全是指定的,因为这个:
<node>FLT10 FLT3</node>
<node>FLT1 FLT2</node>
为了搜索节点,我只有一个可能的值(在这种情况下:FLT1 或 FLT2 或 FLT10 或 FLT3),所以简单的包含将工作寻找 FLT10、FLT3 和 FLT2,但不是 FLT1,因为在这种情况下包含返回带有 FLT10 的节点,因为(显然)它包含 FLT1。我试着做:
[contains(., concat($the_ref, ' '))]
第一步是尝试添加一个空格,然后它开始对 FLT10 和 FLT1 起作用,但对 FLT3 和 FLT2 不起作用。我的第二个也是愚蠢的步骤是这样的:
[contains(., concat($the_ref, ' ')) or contains(., concat($the_ref, '<'))]
而且......好吧......假设我没有得到预期的结果:/
知道我怎么能做到这一点吗?
提前致谢。
PD:我使用的是 xslt 1.0
考虑以下示例:
XML
<input>
<node>FLT10 FLT3</node>
<node>FLT1 FLT2</node>
<node>FLT4 FLT1</node>
<node>FLT5 FLT11</node>
</input>
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:template match="/input">
<result>
<xsl:copy-of select="node[contains(concat(., ' '), 'FLT1 ')]" />
</result>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="UTF-8"?>
<result>
<node>FLT1 FLT2</node>
<node>FLT4 FLT1</node>
</result>
PS 更好的解决方案是更改输入格式。
注意:更强大的解决方案可以:
[contains(concat(' ', ., ' '), ' FLT1 ')]
防止双方误报。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句