Sql server 2005 如何在sqlserver中解析具有特殊字符的xml

Sql server 2005 如何在sqlserver中解析具有特殊字符的xml,sql-server-2005,xml-parsing,Sql Server 2005,Xml Parsing,我在添加时遇到以下错误您需要确保XML有效,因此您需要确保对任何特殊字符进行编码 e、 g DECLARE@MyXML SET@MyXML= 白色 蓝色 黑色 绿色 红色 苹果 菠萝 葡萄 甜瓜 ' & ' " < > & ' " xml中的无效特殊字符及其替换 &-& - “-” “-' 你能提供给我,有多少特殊字符的xml没有被解析,以及它们的替代品吗 DECLARE @MyXML XML SET @MyXML = '<SampleXML> &

我在添加
时遇到以下错误您需要确保XML有效,因此您需要确保对任何特殊字符进行编码

e、 g

DECLARE@MyXML
SET@MyXML=
白色
蓝色
黑色
绿色
红色
苹果
菠萝
葡萄
甜瓜
'
 & ' "            < > & ' "

xml中的无效特殊字符及其替换

  • &-
    &
  • <-
  • >-
  • “-
  • “-
    '

  • 你能提供给我,有多少特殊字符的xml没有被解析,以及它们的替代品吗
    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)
    
    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>'
    
    <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>
    
    <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
    -------------------- --------------------
     < > & ' "            < > & ' "