我一直在寻找解决问题的方法。实际上我想从XML列中检索一些数据。 以下是数据:
<Notification xmlns="http://model.company/notification/de/v1"
dateNotification="2017-07-24T11:47:51.012+02:00"
identifiant="4b7330c7-021f-4cf9-ace6-f74d73f409ef"
personneId="1071249"
source="REGLES"
sourceVersion="1.0.17"
typeMouvement="MODIFICATION">
<EvenementDE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
referenceOriginale="1071249"
xsi:type="ChangementSignaletique">
<Champ
ancienneValeur="Doe"
nom="nom"
nouvelleValeur="DOE" />
</EvenementDE>
<EvenementDE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
referenceOriginale="1071249"
xsi:type="ChangementSignaletique">
<Champ
ancienneValeur="John"
nom="prenom"
nouvelleValeur="John Carl" />
</EvenementDE>
</Notification>
我想为特定的“referenceOriginale”检索“ancienneValeur”,“nouvelleValeur”。 这是小提琴手:Fiddler 从根获取属性很容易,但无法从Champ获得属性。
我希望有人可以帮助我。 提前谢谢。
答案 0 :(得分:1)
您必须对要查询/提供的元素和属性使用正确的XPath。
DECLARE @xml XML = N'... your xml...';
WITH XMLNAMESPACES (DEFAULT 'http://model.company/notification/de/v1')
SELECT
N.N.value('./Champ[1]/@ancienneValeur', 'NVARCHAR(100)') AS [ancienneValeur]
FROM @xml.nodes('/Notification/EvenementDE') As N(N)
WHERE N.N.value('./@referenceOriginale', 'INT') = 1071249
......结果......
ancienneValeur
Doe
John