我有以下 XML,您可以看到它包含三個 LevelA 元素。我想獲取 /LevelA/Value(即 9101),其中 /LevelA/LevelB2/LevelC ==“地址”。現在在 PROD 中,元素的位置可能會改變,因此地址元素可能是第一個或最后一個或在中間。我能夠基于索引撰寫兩個單獨的查詢,但如何撰寫一個 xpath 查詢,其中包含用于與地址匹配的條件,并回傳 9101,而與 A 級元素的位置無關。
DECLARE @x XML;
SET @x = '
<root>
<LevelA>
<LevelB>EqualTo</LevelB>
<LevelB2>
<LevelC>Item4</LevelC>
<LevelC2>Item5</LevelC2>
<LevelC3>
<anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">123456</anyType>
</LevelC3>
</LevelB2>
<Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:boolean">true</Value>
</LevelA>
<LevelA>
<LevelB>EqualTo</LevelB>
<LevelB2>
<LevelC>Item4</LevelC>
<LevelC2>Item5</LevelC2>
<LevelC3>
<anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">123456</anyType>
</LevelC3>
</LevelB2>
<Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:boolean">true</Value>
</LevelA>
<LevelA>
<LevelB>EqualTo</LevelB>
<LevelB2>
<LevelC>Address</LevelC>
<LevelC2>House</LevelC2>
<LevelC3/>
</LevelB2>
<Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">9101</Value>
</LevelA>
</root>
'
SELECT @x.value('/root[1]/LevelA[3][1]/LevelB2[1]/LevelC[1]', 'varchar(max)')
SELECT @x.value('/root[1]/LevelA[3][1]/Value[1]', 'int')
uj5u.com熱心網友回復:
你可以做
SELECT @x.value('(/root/LevelA[LevelB2/LevelC = "Address"]/Value)[1]', 'int')
將謂詞應用于LevelA
“LevelB2/LevelC/text()
地址”
資料庫小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536417.html
上一篇:xsd架構中的Xpath