2

私はかなり単純な Xpath クエリ (下記) を使用して、SQL Server 2008 データベースの列をクエリします。その値はすべて、例の形式に従います (下記)。クエリを実行しているすべての行に対して属性が定義されているにもかかわらず、属性の値 (「VALUE」など) ではNULLなく、すべての行に対してクエリが返されます。exampleexample

xsdXquery 式で名前空間と名前空間を宣言し、xsi複数の異なる属性名から選択しようとしましたが、どちらも効果がありませんでした。私は何が欠けていますか?

クエリ:

select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName

XML サンプル ノード(実際の XML にはさらに多くの属性が含まれていますが、省略しました):

<RootNode xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://intranet"
          example="VALUE">
  <IsValid>true</IsValid>
</RootNode>

名前空間を使用してクエリを試行しましたが、同じ結果になりました:

select ColumnName.value('
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";

(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName
4

2 に答える 2

4

xml データのデフォルトの名前空間を追加する必要があり、ほとんどの場合、xpath クエリを変更します。

テストのためにこれを実行していませんが、これは私の最善の推測であり、あなたを動かすはずです:

WITH XMLNAMESPACES (N'http://intranet' as intra)
SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result]
FROM TableName
于 2013-04-22T19:07:04.623 に答える
4

このクエリは機能します。問題は、データ ノードがカスタムのデフォルト名前空間を宣言していることです。

select ColumnName.value('
declare default element namespace "http://intranet";

(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName
于 2013-04-22T19:07:45.293 に答える