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 についても同様です。

私の次の問題は上記と似ていますが、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>

そこには 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

次の出力を返します。

ここに画像の説明を入力

そして、質問の 2 番目の部分について: はい、2 つの名前空間が定義されていますが、それらはまったく使用されていないため、基本的には無視できます。

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 に答える