2013-02-25 26 views
6

Tôi đang cố gắng phân tích một đoạn XML và xóa các nút có chứa các giá trị nhất định. Tôi biết làm thế nào để loại bỏ chúng nếu giá trị là chính xác, nhưng tôi muốn sử dụng một cái gì đó giống như một "chứa".Xóa các nút có giá trị nhất định khỏi XML bằng TSQL

này hoạt động xóa chính xác:

update @XML set data.modify('delete //Message[text() = "customer has deleted their account"]') 

Nhưng tôi muốn xóa nơi "Message" nút chỉ chứa văn bản, một cái gì đó như:

update @XML set data.modify('delete //Message[contains(text(), "customer")]') 

Tuy nhiên này sẽ trả về lỗi:

XQuery [@XML.data.modify()]: 'contains()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *' 

Trả lời

15

Hãy thử

update @XML set data.modify('delete //Message[text()][contains(.,"customer")]') 

để xóa các <message/> phần tử và nội dung của nó

update @XML set data.modify('delete //Message//text()[contains(.,"customer")]') 

xóa nội dung <message/> phần tử.

Ví dụ ở đây http://msdn.microsoft.com/en-us/library/ms178026.aspx

+0

Trưởng. Tôi đã nhận được một cái gì đó rất giống nhau, nhưng nó là một bước 2. Xóa nội dung của nút và sau đó xóa các nút trống. Điều này là thanh lịch hơn nhiều. –