我很想尝试获取包含某些字符串值的节点。使用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
答案 0 :(得分:1)
考虑以下示例:
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 ')]
防止双方出现误报。