2009-03-16 22 views
165

Câu hỏi khá đơn giản - Tôi có một thuộc tính mà tôi muốn có dấu ngoặc kép trong. Làm thế nào để thoát khỏi chúng? Tôi đã thửLàm cách nào để thoát khỏi các dấu nháy kép trong các thuộc tính trong một chuỗi XML trong T-SQL?

  • \ "
  • ""
  • \\"

Và tôi đã thực hiện các biến @xml cả loại xml và varchar (max) cho tất cả chúng .

declare @xml xml --(or varchar(max) tried both) 

set @xml = '<transaction><item value="hi "mom" lol" 
    ItemId="106" ItemType="2" instanceId="215923801" dataSetId="1" /></transaction>' 

declare @xh int 
exec sp_xml_preparedocument @xh OUTPUT, @xml 

insert into @commits --I declare the table, just removed it for brevity 
select 
    x.* 
from openxml(@xh,'/transaction/item') 
    WITH (
    dataItemId int, 
    dataItemType int, 
    instanceId int, 
    dataSetId int, 
    value varchar(max) 
) x 
+1

Nhân tiện ... không có lý do gì (AFAIK) sử dụng openxml ở đây ... đó là công cụ "trước năm 2005". Nếu bạn có giá trị xml, hãy sử dụng nó dưới dạng xml trực tiếp. –

+0

Marc - Cảm ơn bạn. Tôi đã có một lỗi khác mà cuối cùng là openxml đã phá sản với dấu nháy đơn: 'Tôi nghĩ tôi sẽ đăng nó như một câu hỏi/câu trả lời cho google để tìm. –

Trả lời

266

Đây có phải là &quot; trong xml không? tức là

"hi &quot;mom&quot; lol" 

** edit: ** tested; hoạt động tốt:

declare @xml xml 

set @xml = '<transaction><item value="hi &quot;mom&quot; lol" 
    ItemId="106" ItemType="2" instanceId="215923801" dataSetId="1" /></transaction>' 

select @xml.value('(//item/@value)[1]','varchar(50)') 
+4

" cũng hoạt động tốt trong XAML. –

4

tSql thoát dấu ngoặc kép với dấu ngoặc kép khác. Vì vậy, nếu bạn muốn nó là một phần của chuỗi sql của bạn theo nghĩa đen bạn sẽ làm điều này:

declare @xml xml 
set @xml = "<transaction><item value=""hi"" /></transaction>" 

Nếu bạn muốn bao gồm một báo bên trong một giá trị trong xml chính nó, bạn sử dụng một thực thể, mà sẽ trông như thế này:

declare @xml xml 
set @xml = "<transaction><item value=""hi &quot;mom&quot; lol"" /></transaction>" 
+4

Tốt nhất là không sử dụng dấu ngoặc kép làm dấu phân cách chuỗi SQL. Dấu nháy đơn là chuẩn ANSI và luôn hoạt động, bất kể cài đặt QUOTED_IDENTIFIER. – bobince

+0

Đồng ý, nhưng tôi muốn chứng minh điều đó là có thể, chỉ trong trường hợp có bất kỳ sự nhầm lẫn nào về những gì anh ta đang cố gắng làm. –

2

Trong Jelly.core để kiểm tra một chuỗi chữ người ta sẽ sử dụng:

&lt;core:when test="${ name == 'ABC' }"&gt; 

Nhưng nếu tôi phải kiểm tra cho chuỗi "R Us Toy của":

&lt;core:when test="${ name == &amp;quot;Toy&apos;s R Us&amp;quot; }"&gt; 

Nó sẽ là như thế này, nếu dấu ngoặc kép được phép vào bên trong:

&lt;core:when test="${ name == "Toy's R Us" }"&gt; 
4

không thể bình luận nữa nhưng bình chọn nó lên và muốn cho mọi người biết rằng &quot; tác phẩm rất tốt cho cấu hình xml tệp khi tạo biểu thức regex cho RegexTransformer trong Solr như sau: regex=".*img src=&quot;(.*)&quot;.*" bằng cách sử dụng phiên bản thoát thay vì dấu ngoặc kép.

+0

Hãy nhớ rằng, luôn luôn đưa ra một lý do cho một downvote giúp bạn trông giống như một troll và cải thiện chất lượng thảo luận. – pulkitsinghal

Các vấn đề liên quan