Попытка извлечь IP из XML с использованием узлов XML - PullRequest
0 голосов
/ 03 октября 2018

Из приведенного ниже XML я пытаюсь извлечь IP, но это не работает .. Я не уверен, где я делаю ошибку

declare @xml xml

set @xml='<auditElement>
  <RequestOrigination>
    <IP>20.20.20.20</IP>
     </RequestOrigination>
</auditElement>'

Моя попытка

select 
 b.value('@IP[1]','nvarchar(100)')
 from  @xml.nodes('/auditElement/RequestOrigination') as org(b)

Требуется вывод:

IP
20.20.20.20

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Нет необходимости в .nodes() ...

И нет необходимости в @ до IP.Это попытается прочитать атрибут , называемый «IP», но вы читаете содержимое (text() -узел) элемента *.Ваш код будет работать для чего-то вроде этого:

<SomeElement IP="20.20.20.20">

Вы можете использовать .value() с полным XPath, как здесь:

declare @xml xml

set @xml='<auditElement>
  <RequestOrigination>
    <IP>20.20.20.20</IP>
     </RequestOrigination>
</auditElement>';

SELECT @xml.value('(/auditElement/RequestOrigination/IP/text())[1]','varchar(20)');
0 голосов
/ 03 октября 2018

Вы были почти там!2 крошечные ошибки ..

 declare @xml xml

set @xml='<auditElement>
  <RequestOrigination>
    <IP>20.20.20.20</IP>
     </RequestOrigination>
</auditElement>'

SELECT @xml

select 
 b.value('IP[1]','nvarchar(100)')
 from  @xml.nodes('//auditElement/RequestOrigination') as org(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...