2012-03-29 13 views
12

मैं त्रुटि निम्न जब मैं अपने एक्सएमएल में < जोड़ने हो रही है,कैसे एसक्यूएल सर्वर में विशेष वर्ण

संदेश 9455, स्तर 16, राज्य 1, पंक्ति 6 ​​XML पार्सिंग के साथ एक्सएमएल पार्स करने के लिए: लाइन 4, चरित्र 14, अवैध योग्य नाम चरित्र

मैं इस प्रकार के विशेष पात्रों के साथ एक्सएमएल कैसे पार्स कर सकता हूं?

DECLARE @MyXML XML 
SET @MyXML = '<SampleXML> 
<Colors> 
<Color1>W < hite</Color1> 
<Color2>Blue</Color2> 
<Color3>Black</Color3> 
<Color4 Special="Light">Green</Color4> 
<Color5>Red</Color5> 
</Colors> 
<Fruits> 
<Fruits1>Apple</Fruits1> 
<Fruits2>Pineapple</Fruits2> 
<Fruits3>Grapes</Fruits3> 
<Fruits4>Melon</Fruits4> 
</Fruits> 
</SampleXML>' 

SELECT 
a.b.value('Colors[1]/Color1[1]','varchar(10)') AS Color1, 
a.b.value('Colors[1]/Color2[1]','varchar(10)') AS Color2, 
a.b.value('Colors[1]/Color3[1]','varchar(10)') AS Color3, 
a.b.value('Colors[1]/Color4[1]/@Special','varchar(10)')+' '+ 
+a.b.value('Colors[1]/Color4[1]','varchar(10)') AS Color4, 
a.b.value('Colors[1]/Color5[1]','varchar(10)') AS Color5, 
a.b.value('Fruits[1]/Fruits1[1]','varchar(10)') AS Fruits1, 
a.b.value('Fruits[1]/Fruits2[1]','varchar(10)') AS Fruits2, 
a.b.value('Fruits[1]/Fruits3[1]','varchar(10)') AS Fruits3, 
a.b.value('Fruits[1]/Fruits4[1]','varchar(10)') AS Fruits4 
FROM @MyXML.nodes('SampleXML') a(b) 

उत्तर

19

अमान्य विशेष वर्ण & एक्सएमएल में अपनी स्थानापन्न

  1. & - &amp;
  2. <-&lt;
  3. > - &gt;
  4. "- &quot;
  5. '- &#39;
4

आपको यह सुनिश्चित करना होगा कि एक्सएमएल मान्य है, इसलिए आपको यह सुनिश्चित करना होगा कि कोई विशेष वर्ण एन्कोड किया गया हो।

उदा।

DECLARE @MyXML XML 
SET @MyXML = '<SampleXML> 
<Colors> 
<Color1>W &lt; hite</Color1> 
<Color2>Blue</Color2> 
<Color3>Black</Color3> 
<Color4 Special="Light">Green</Color4> 
<Color5>Red</Color5> 
</Colors> 
<Fruits> 
<Fruits1>Apple</Fruits1> 
<Fruits2>Pineapple</Fruits2> 
<Fruits3>Grapes</Fruits3> 
<Fruits4>Melon</Fruits4> 
</Fruits> 
</SampleXML>' 
+0

तुम मुझे प्रदान करेगा, कितने speical चरित्र एक्सएमएल पार्स नहीं था, और thier subsitute –

10

< जरूरतों एक्सएमएल में &lt; के रूप में निर्दिष्ट करने की

<SampleXML> 
<Colors> 
<Color1>W &lt; hite</Color1> 
<Color2>Blue</Color2> 
<Color3>Black</Color3> 
<Color4 Special="Light">Green</Color4> 
<Color5>Red</Color5> 
</Colors> 
<Fruits> 
<Fruits1>Apple</Fruits1> 
<Fruits2>Pineapple</Fruits2> 
<Fruits3>Grapes</Fruits3> 
<Fruits4>Melon</Fruits4> 
</Fruits> 
</SampleXML> 

अद्यतन: आप जरूरत नोड मूल्यों में से बचने के लिए

चरित्र < =>&lt; और & =>&amp;
विशेषता मानों में आपको " =>&quot; से बचने की आवश्यकता है यदि आप अपने गुण मानों के आस-पास " का उपयोग करते हैं।

यह एक मान्य XML है:

<root> 
    <item> &lt; > &amp; ' "</item> 
    <item att=" &lt; > &amp; ' &quot;" /> 
</root> 

एक प्रश्न में यह प्रयास करें:

declare @xml xml = 
' 
<root> 
    <item> &lt; > &amp; '' "</item> 
    <item att=" &lt; > &amp; '' &quot;" /> 
</root> 
' 

select @xml.value('(root/item)[1]', 'varchar(20)') as NodeValue, 
     @xml.value('(root/item/@att)[1]', 'varchar(20)') as AttValue 

परिणाम:

NodeValue   AttValue 
-------------------- -------------------- 
< > & ' "   < > & ' " 
संबंधित मुद्दे