获取包含 X 字符串的节点

Get a node that contains X string

我有点卡住了,试图获取包含特定字符串值的节点。使用 node[contains(., X)] 似乎很容易,但问题是这个公式我得到的节点不完全是指定的,因为这个:

<node>FLT10 FLT3</node>
<node>FLT1 FLT2</node>

要搜索节点,我只有一个可能的值(在本例中:FLT1 或 FLT2 或 FLT10 或 FLT3),因此简单的包含可以查找 FLT10、FLT3 和 FLT2,但不能查找 FLT1因为在这种情况下,包含 return 具有 FLT10 的节点,因为(显然)它包含 FLT1。我尝试这样做:

[contains(., concat($the_ref, ' '))]

第一步是尝试添加一个空格,然后它开始对 FLT10 和 FLT1 起作用,但对 FLT3 和 FLT2 不起作用。我的第二个也是愚蠢的步骤是:

[contains(., concat($the_ref, ' ')) or contains(., concat($the_ref, '&lt;'))]

并且...好吧...假设我没有得到预期的结果:/

知道我该怎么做吗?

提前致谢。

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>

P.S。更好的解决方案是更改输入格式。


注意:一个更健壮的解决方案会做:

[contains(concat(' ', ., ' '), ' FLT1 ')]

防止双方误报。