【问题标题】:Add XML Namespace attribute to 3rd party xml?将 XML 命名空间属性添加到第 3 方 xml?
【发布时间】:2009-01-20 13:14:58
【问题描述】:

我正在使用 VB 2008,我正在尝试将 xmlns="mynamespace" 属性添加到 XDocument 的根元素。

XML 文档是由第 3 方创建的,我已将其加载到 VB XDocument 对象中。就它而言,它没有命名空间。我一直在处理本地副本,并在文本编辑器中添加了命名空间,以便我可以使用 VB 中的 XMLToSchema 来启用智能感知等,按照 Beth Massi vids MSDN 中的说明。现在其余的代码工作我想再次打开实时文档。如果没有命名空间,我的 XML 文字将无法解析。

我尝试使用几种方法将 XMLNS 属性添加到根标记,但未成功,我得到的最接近的是以下三个代码示例。

Dim myNS As XNamespace = "urn:nbf:namespacename"
myXML.Element("nameofrootelement").Add(myNS)

^^^^ 命名空间是作为根元素的值添加的,而不是作为属性。

XML.Root.Add(New XAttribute("xmlns", "name"))

^^^^ 产生错误:抛出运行时异常:System.Xml.XmlException - 前缀 '' 不能在同一个起始元素标记内从 '' 重新定义为 'name'。

但是

XML.Root.Add(New XAttribute("test", "name"))

^^^^ 工作正常。大概它不喜欢我手动尝试设置保留属性?从我所做的一些谷歌搜索来看,这种命名空间似乎过于复杂。

如何解决这个问题? :D

谢谢!


更新

谢谢安东尼。

我认为我需要更好地了解命名空间。

我想 .ToString 它,然后修改,然后 .Parse 它也是,但我想要一个更好的解决方案,这样它可以帮助我更好地理解它!不过我确实尝试过,正如您正确指出的那样,它也会影响所有后代,因此它仍然会中断。

我将使用由不同第三方生成的多个 XML 提要,我认为为简单起见,我将完全省略命名空间!

我自己的自定义解析函数将第三方提要重写为一个统一的文档,然后由另一个例程处理。我将能够将 ns 添加到 XML 的中间部分,这将有助于编写辅助函数。

谢谢!

【问题讨论】:

    标签: xml vb.net namespaces linq-to-xml


    【解决方案1】:

    您需要了解,任何标记的真正全名是在 XML 中看到的标记名(称为本地名称)和命名空间。通过尝试将 xmlns="xxx" 放在一个元素上,您实际上是在尝试重命名该元素及其所有未明确分配其自己的命名空间的后代。

    正如标记名在元素上是只读的一样,该元素的命名空间也是只读的。

    也许最简单的解决方案(假设您一开始就无法让第三方正确生成 XML)是在解析之前将 xmlns 注入到文本中。

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2017-09-21
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多