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

标签 .net xml powershell namespaces

背景 :我想开发一个 PowerShell 脚本来操作 *.regsvr 文件的内容。这是一个 XML 文件,用于通过 SQL Server Management Studio 导出/导入已注册的 SQL 服务器。这是一个 blog pos t 谈到使用 SQL 查询来创建文件。我想做的不仅仅是创建一个文件,我想操作现有的导出文件。

问题 :我遇到的问题是我无法弄清楚如何使用默认 namespace 读取 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 查询中使用前缀?

最佳答案

即使以 URL 形式指定,XML 命名空间也不必存在。它们主要只是唯一的名称。您已经找到了访问默认命名空间中元素的正确方法 - 您必须指定一个前缀。我使用“dns”作为前缀来表示默认命名空间。

关于.net - 默认 XML 命名空间是否需要前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15188359/

相关文章:

C# 图像去歪斜

c# - 是否有一个 Debug.Assert() 版本可以检查发布时的条件?

python - 奇怪的 lxml 行为

windows - 用于删除以 '.' 开头的文件夹的 Powershell 脚本不起作用 - 为什么?

使用替代凭证的 Powershell 自动复制文件

.net - XDocument内存使用问题

c# - 在 WPF 中设置和删除工具提示

android - XML 属性用法 "android:focusableInTouchMode"

C# xml : How to save nested rows

json - 在Powershell中用不同的值查找和替换JSON中的值的所有实例