1

背景: *.regsvr ファイルの内容を操作する PowerShell スクリプトを開発したいと考えています。これは、SQL Server Management Studio で登録済みの SQL サーバーをエクスポート/インポートするために使用される XML ファイルです。これは、SQL クエリを使用してファイルを作成する方法について説明しているブログ投稿です。ファイルを作成するだけでなく、既存のエクスポート ファイルを操作したい。

問題: 私が抱えている問題は、既定の名前空間を使用して XmlDocument を読み取る方法がわからないことです。

期待どおりに動作しない名前空間の例:

$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
  <identity/>
</model>
'@

$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)

$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace([String]::Empty, "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()

$xpath = "/model"
$doc.SelectNodes($xpath, $nsmgr).count

出力は 0 ですが、1 が予期されていました。

これは機能します:

$xmlstring = @'
<?xml version="1.0"?>
<model xmlns="http://schemas.serviceml.org/smlif/2007/02">
  <identity />
</model>
'@

$doc = new-object System.Xml.XmlDocument
$doc.LoadXml($xmlstring)

$nsmgr = new-object System.Xml.XmlNamespaceManager($doc.NameTable)
$nsmgr.AddNamespace("x", "http://schemas.serviceml.org/smlif/2007/02")
$nsmgr.PushScope()

$xpath = "/x:model"
$doc.SelectNodes($xpath, $nsmgr).count

出力は 1 です。デフォルトの名前空間を指定し、xpath クエリでプレフィックスを使用しないようにするにはどうすればよいですか?

4

1 に答える 1

1

URL形式で指定されている場合でも、XML名前空間が存在する必要はありません。それらは主に単なる一意の名前です。デフォルトの名前空間の要素にアクセスする正しい方法を見つけました。プレフィックスを指定する必要があります。デフォルトの名前空間を表すプレフィックスとして「dns」を使用します。

于 2013-03-03T19:57:24.877 に答える