14

私はいくつかのXMLを持っています:

<?xml version="1.0" ?>
<Project ToolsVersion="4.0">
    <PropertyGroup Condition="'$(key)'=='1111'">
          <Key>Value</Key>
    </PropertyGroup>
</Project>

: これは私が使用している実際の XML ではありません。よりきれいで短いだけで、問題を示しています。

MSXML を使用して、ノードをクエリできます。

IXMLDOMNode node = doc.selectSingleNode("//PropertyGroup/@Condition");

そしてそれはうまくいきます:

Condition="'$(key)'=='1111'"

しかし、それは実際には私が持っている XML ではありません

実際には、私が持っている XML には名前空間宣言が含まれています。

xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

実際のXML ドキュメントを作成します。

<?xml version="1.0" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup Condition="'$(key)'=='1111'">
          <Key>Value</Key>
    </PropertyGroup>
</Project>

今私のクエリ:

IDOMNode node = doc.selectSingleNode("//PropertyGroup/@Condition");

一致するノードを返しません。

MSXML を使用して既定の名前空間を照会するにはどうすればよいですか?

:

  • xmlでデフォルト以外の名前空間を照会する方法はすでに知っています。あなたが使う:

       doc.setProperty("SelectionNamespaces", 
             "xmlns="http://schemas.microsoft.com/developer/msbuild/2003");
    
  • .NET で既定の名前空間をクエリする方法は既に知っています。名前空間マネージャーを使用し、デフォルトの名前空間に名前を付けてから、その名前を使用してクエリを実行すると、デフォルトではないため、デフォルト以外の名前空間をクエリできます

  • 受け取った XML 文字列から不快なテキストを削除することはできますが、「正しい方法で」実行したいと思います。xmlns

MSXML を使用して"default"または"unnamed"名前空間を照会するにはどうすればよいですか?


:実際には、XML i は SQL Server の XML ShowPlan出力を使用しています。

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
   <ShowPlanXML Version="1.1" Build="10.50.1600.1" 
                   xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
      <BatchSequence>
           <Batch>
           ...
           </Batch>
      </BatchSequence>
   </ShowPlanXML> 

ここでも問題のある名前空間宣言が見られます。削除は機能しますが、面倒です。

他に何を試しましたか?

私もSelectionNamespaceを設定しようとしました:

doc.setProperty('SelectionNamespaces', 
      'xmlns="http://schemas.microsoft.com/developer/msbuild/2003"');

Microsoft が KB 記事で示唆しているように。

デフォルトの名前空間を取得するにはどうすればよいですか?

実際には、名前空間はにしません。私のクエリは理にかなっており、それを機能させたいと思っています。したがって、質問に対する別のアプローチは次のとおりです。

その名前空間名がそうであるかどうかに関係なく、デフォルトの名前空間を照会するにはどうすればよいですか?

: msxml はネイティブコードであり、ネイティブの Win32 コンパイラから使用します (つまり、.NET フレームワークや CLR はありません)。

4

1 に答える 1