How do I extract the value of the attribute from the XML data?
drop table #demo2
create table #demo2 (field1 xml)
insert into #demo2 (field1)
values (
'<root xmlns="system/schema" vesion="1.0">
<header msgtype="1">
<msgid>1</msgid>
</header>
<transaction>
<systemevent>
<eventdetail eventtype="100">
<eventstamp unitid="87888" value="2021-11-14T01:44:41.069Z" />
<eventitem id="1" value="abc123" />
</eventdetail>
<eventdetail eventtype="102">
<eventstamp unitid="87889" value="2021-11-14T01:44:41.704Z" />
<eventitem id="2" />
</eventdetail>
</systemevent>
</transaction>
</root>')
I am expecting the answer to be abc123 & null for this XML. Below is the query I tried to get my expected value.
select x.v.value('@value','VARCHAR(100)') AS EventValue,
y.v.value('@value','VARCHAR(100)') AS EventValue2
from #demo2 t
cross apply field1.nodes('//eventdetail[@eventtype="100"]/eventitem') x(v)
cross apply field1.nodes('//eventdetail[@eventtype="102"]/eventitem') y(v)
I am not sure what is missing in my xpath to get the value. Thanks for your help.