获取包含 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, '<'))]
并且...好吧...假设我没有得到预期的结果:/
知道我该怎么做吗?
提前致谢。
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 ')]
防止双方误报。
我有点卡住了,试图获取包含特定字符串值的节点。使用 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, '<'))]
并且...好吧...假设我没有得到预期的结果:/
知道我该怎么做吗?
提前致谢。
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 ')]
防止双方误报。