2

给定表中 XML 字段的以下内容:

    <View>
      <Criminal xmlns="http://tempuri.org/crimes.xsd">
        <Person>
          <PersonID>1234</PersonID>
          <LastName>SMITH</LastName>
          <FirstName>KEVIN</FirstName>
        <Cases>
          <PersonID>1234</PersonID>
          <CaseNumber>12CASE34</CaseNumber>
        </Cases>
       </Person>
      </Criminal>
     </View>

我将如何提取 Person/PersonID、LastName、Firstname 信息?CaseNumber 也是如此。

我的下一个问题与上面类似,但让我们添加第二个命名空间:

<MessageContent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Content>Content in here!!</Content>
   <Type>Empty</Type>
</MessageContent>

请注意,我在那里有 2 个命名空间,它们也有 ":xsi" 和 ":xsd"。我认为这些被称为模式。

4

1 回答 1

5

试试这个:

DECLARE @table TABLE (ID INT NOT NULL, XmlContent XML)

INSERT INTO @table VALUES(1, '<View>
      <Criminal xmlns="http://tempuri.org/crimes.xsd">
        <Person>
          <PersonID>1234</PersonID>
          <LastName>SMITH</LastName>
          <FirstName>KEVIN</FirstName>
        <Cases>
          <PersonID>1234</PersonID>
          <CaseNumber>12CASE34</CaseNumber>
        </Cases>
       </Person>
      </Criminal>
     </View>')

;WITH XMLNAMESPACES('http://tempuri.org/crimes.xsd' AS ns)
    SELECT
        PersonID = XmlContent.value('(/View/ns:Criminal/ns:Person/ns:PersonID)[1]', 'int'),
        FirstName = XmlContent.value('(/View/ns:Criminal/ns:Person/ns:FirstName)[1]', 'varchar(50)'),
        LastName = XmlContent.value('(/View/ns:Criminal/ns:Person/ns:LastName)[1]', 'varchar(50)')
    FROM @table
    WHERE ID = 1

返回以下输出:

在此处输入图像描述

对于问题的第二部分:是的,您定义了两个命名空间-但它们根本没有被使用-因此您基本上可以忽略它们:

INSERT INTO @table VALUES(2, '<MessageContent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Content>Content in here!!</Content>
   <Type>Empty</Type>
</MessageContent>')

SELECT
    Content = XmlContent.value('(/MessageContent/Content)[1]', 'varchar(50)'),
    Type = XmlContent.value('(/MessageContent/Type)[1]', 'varchar(50)')
FROM @table
WHERE ID = 2

回报:

在此处输入图像描述

于 2013-11-04T19:52:50.910 回答