Tôi có truy vấn SQL sau:Truy vấn các kiểu dữ liệu XML có xmlns nút thuộc tính
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
này trả về:
Name
----
Foo
Tuy nhiên, nếu nút <Feed>
tôi có một xmlns
thuộc tính, sau đó doesn này không trả lại bất kỳ kết quả nào:
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed xmlns="bar"><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
Trả về:
Name
----
Điều này chỉ xảy ra nếu tôi có thuộc tính xmlns
, mọi thứ khác hoạt động tốt.
Tại sao điều này và làm cách nào tôi có thể sửa đổi truy vấn SQL của mình để trả về kết quả bất kể thuộc tính?
+1 Có cách nào đơn giản là bỏ qua các xmlns không? Tôi muốn chuyển đổi kiểu dữ liệu 'XML' thành một chuỗi, loại bỏ thuộc tính xmlns và sau đó bỏ nó trở lại ... – Curt
Tôi thực sự không quan tâm đến không gian tên và đây là nguồn cấp dữ liệu của bên thứ ba với phiên bản trên xmlns URL, do đó, dễ bị thay đổi bên ngoài – Curt
@Curt: không, khi không gian tên XML có trong XML của bạn, bạn không thể chỉ đơn giản là bỏ qua nó - bạn cần phải giải quyết nó. Nếu bạn chỉ có một không gian tên XML - sử dụng cách tiếp cận # 1 để định nghĩa nó là một không gian tên XML mặc định và cần phải khá đơn giản và dễ sử dụng –