SQL Server: как проверить, содержит ли атрибут элемента узла xml определенную строку? - PullRequest
2 голосов
/ 27 января 2012

У меня есть такой XML-документ.

<Students>
  <Student>
    <Node Type="http://www.something.com/xyz/10/abc/RollNumber" 
          Value="Original=10000;Modified=100003445" />
    <Node Type="http://www.something.com/xyz/10/abc/SerialNumber" 
          Value="Original=10000;Modified=172777" />
    <Node Type="http://www.something.com/xyz/10/abc/Stream" 
          Value="Original=CS;Modified=EC" />
  </Student>
</Students>

Чтобы получить значение потока, я могу написать:

Select @MyXML.value('(/Students/Student/Node[@Type="http://www.something.com/xyz/10/abc/Stream"]/@Value)[1]', 'varchar(100)') AS ChangedValue

Моя проблема в том, что часть URL может измениться, поэтому я хочу сопоставить ее на основе некоторых критериев, таких как

@Type = "%Stream"

или

@Type.Contains("Stream")

Возможно ли это?

1 Ответ

2 голосов
/ 27 января 2012

Механизм xpath в SQL поддерживает функцию contains, поэтому вы можете сказать:

SELECT
    @MyXML.value('(/Students/Student/Node[contains(@Type,"Stream")]/@Value)[1]',
                 'varchar(100)') 
    AS ChangedValue

К сожалению, очевидная ends-with() - это функция xpath 2.0 , и механизм SQL этого не предлагает, поэтому, если вы хотите проверить строку , заканчивающуюся Stream Вы должны были бы сказать (согласно этому сообщению ):

SELECT
    @MyXML.value
   ('(/Students/Student/Node["Stream"
                = substring(@Type, string-length(@Type)-5)]/@Value)[1]',
     'varchar(100)') 
    AS ChangedValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...