默认XML命名空间是否需要前缀?

时间:2013-03-03 17:20:58

标签: .net xml powershell namespaces

背景:我想开发一个PowerShell脚本来操作* .regsvr文件的内容。这是一个XML文件,用于通过SQL Server Management Studio导出/导入已注册的SQL Server。这是一个blog pos t,讨论使用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查询中使用前缀?

1 个答案:

答案 0 :(得分:1)

即使在URL表单中指定,也不必存在XML名称空间。他们主要是唯一的名字。您已找到访问默认命名空间中元素的正确方法 - 您必须指定前缀。我使用'dns'作为前缀来表示默认命名空间。