Получить узел, содержащий строку X - PullRequest
0 голосов
/ 08 мая 2019

Я немного застрял, пытаясь получить узел, содержащий определенное строковое значение. Это кажется легким, используя 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, '&lt;'))]

и ... хорошо ... допустим, я не получил ожидаемых результатов: /

Есть идеи, как я мог это сделать?

Заранее спасибо.

PD: я использую xslt 1.0

1 Ответ

1 голос
/ 08 мая 2019

Рассмотрим следующий пример:

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 ')]

для предотвращения ложных срабатываний с обеих сторон.

...