2011-02-07 9 views
3

私は、エスケープされたXMLとエスケープされていないXMLが混在したテーブルを持っています。もちろん、私が必要とするデータはエスケープされています。例えば、私が持っている:あなたが見ることができるようにSQLとエスケープされたXMLデータ

<Root> 
    <InternalData> 
     <Node> 
       &lt;ArrayOfComment&gt; 
       &lt;Comment&gt 
        &lt;SequenceNo&gt;1&lt;/SequenceNo&gt; 
        &lt;IsDeleted&gt;false&lt;/IsDeleted&gt; 
        &lt;TakenByCode&gt;397&lt;/TakenByCode&gt; 
       &lt;/Comment&gt 
       &lt;/ArrayOfComment&gt; 
     </Node> 
    </InternalData> 
</Root> 

を、ノードタグ内のデータはすべてエスケープされます。私はクエリを使用してノードのデータを取得できますが、それを解析して分割できるようにSQLでXMLに変換するにはどうすればよいですか?私はSQLでXMLを使うのは初めてですが、これの例は見つけられません。

おかげ

アダム

+0

どのDBMS? SQLサーバー? – RichardTheKiwi

+0

UDFとC#を使用してXMLを解析し、好きなように返すことを検討するかもしれません。 – adopilot

答えて

4

あなたの最終的な目標についての十分な情報を与えられていないが、これはあなたが非常に近くなります。 FYI - 2件ありました。両方comment&gt

declare @xml xml 
set @xml = ' 
<Root> 
    <InternalData> 
     <Node> 
       &lt;ArrayOfComment&gt; 
       &lt;Comment&gt; 
        &lt;SequenceNo&gt;1&lt;/SequenceNo&gt; 
        &lt;IsDeleted&gt;false&lt;/IsDeleted&gt; 
        &lt;TakenByCode&gt;397&lt;/TakenByCode&gt; 
       &lt;/Comment&gt; 
       &lt;/ArrayOfComment&gt; 
     </Node> 
    </InternalData> 
</Root> 
' 

select convert(xml, n.c.value('.', 'varchar(max)')) 
from @xml.nodes('Root/InternalData/Node/text()') n(c) 

出力

<ArrayOfComment> 
    <Comment> 
    <SequenceNo>1</SequenceNo> 
    <IsDeleted>false</IsDeleted> 
    <TakenByCode>397</TakenByCode> 
    </Comment> 
</ArrayOfComment> 

後に結果を使用すると、XMLフラグメントからデータを取得するために、直接に変数に入れたり、クロス適用できるXML列があります。

+0

+1、これは滑らかです。これはSQL 2005以上でのみ正しく動作しますか? –

+0

Cyber​​wiki - ありがとう!私は今日後でこれを試すチャンスを得ることを望んでいる。私はそれがどのように行くのか教えてあげるよ! –

0

あなたの最善の策は、HTMLのデコードUDFを調べることです。私はクイック検索を行なったし、この1が見つかりました:それは唯一&gt;&lt;をデコードするように、あなたはそれを変更したい場合があり

http://www.andreabertolotto.net/Articles/HTMLDecodeUDF.aspx

を。上記のものはあなたのニーズを超えているようです。

UPDATE

Cyber​​kiwiのソリューション@ビットクリーナーのようです。実行しているSQL Serverのバージョンが彼のソリューションをサポートしていない場合、私はこれを残しておきます。

関連する問題