我有一个类似于以下格式的 XML 文件:

<XML>
   <Field1>100</Field1>
   <Field2>200</Field2>
   <Field3>300</Field3>
   <Test>400</Test>
</XML>

我需要编写一个查询来获取所有以 Field 开头的元素值。所以鉴于上面的 XML 结果应该是
FieldVal
--------
100
200
300

我已经尝试了以下但它不起作用:
Select
    xc.value('text()', 'int')
From
    @XMLData.nodes('/XML/[starts-with(name(), ''Field'')]') As xt(xc)

注意: 我很清楚,如果我重新格式化我的 XML,这个任务可以很容易地完成,但不幸的是我无法控制 XML 的格式。

最佳答案

一种方法是

declare @XMLData xml ='<XML>
   <Field1>100</Field1>
   <Field2>200</Field2>
   <Field3>300</Field3>
   <Test>400</Test>
</XML>'

Select
    xc.value('.', 'int')
From @XMLData.nodes('/XML/*') As xt(xc)
WHERE xc.value('local-name(.)', 'varchar(50)') LIKE 'Field%'

10-05 23:07