【问题标题】:Add a XmlNode with the namespace of the parent node in .Net在 .Net 中添加一个带有父节点命名空间的 XmlNode
【发布时间】:2023-04-07 01:15:01
【问题描述】:

我正在使用 XmlDocument 和 XmlNode 来操作 xml 文件。假设我想在根目录中添加一个名为“Language”的有效节点,我使用这样的代码:

Dim languageNode As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Language", Nothing)
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)

其中 xmlDoc 是一个 XmlDocument 对象并且已经被加载。但是,在运行后的xml文件中,却是这样的:

<Language xmlns="">en-US</Language>

这并没有通过验证。反正有没有摆脱命名空间?谢谢!

更新: 我正在编辑一个 .rdlc 文件,它定义了一个本地报告,并使用 xml 格式。部分文件如下所示:

<?xml version="1.0" encoding="utf-16"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" 
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

<Language xmlns="">en-US</Language>
...

通常不应该使用这么多的命名空间,但我是从 xslt 生成的。但是生成此文件后会添加 Language 节点。我的代码如下所示:

Dim xmlRdlc As New XmlDocument()
xmlRdlc.Load(file)    
Dim root As XmlNode = xmlRdlc.DocumentElement()
Dim languageNode As XmlNode = xmlRdlc.CreateNode(XmlNodeType.Element, "Language", Nothing)
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)
xmlRdlc.Save(file)

那么我应该怎么做才能像这样添加所需的节点:

<Language>en-US</Language>

【问题讨论】:

  • 这就是您告诉它添加的内容。默认(空)命名空间中名为“Language”的节点。您在寻找什么 XML?从根目录显示。
  • 您应该使用相关的 XML 编辑您的问题。在编辑器中选择 XML 并单击“{}”按钮以缩进 4 使其成为代码块。
  • @JohnSaunders,请查看我的更新
  • 更好。只需发布一个更完整的示例,说明您希望 XML 是什么样子。
  • @JohnSaunders,我没有完成它。刚刚被编辑器卡住了

标签: .net xml namespaces xmlnode


【解决方案1】:

您需要指定命名空间。将“http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition”作为最后一个参数传递给方法。

Dim xmlRdlc As New XmlDocument()
xmlRdlc.Load(file)    
Dim root As XmlNode = xmlRdlc.DocumentElement()
Dim languageNode As XmlNode = xmlRdlc.CreateNode(XmlNodeType.Element, "Language", _
    "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)
xmlRdlc.Save(file)

顺便说一句,使用 LINQ to XML 会更干净:

Dim rdlcNS As XNamespace = "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"
Dim xmlRdlc = XDocument.Load(file)
xmlRdlc.Root.Add(New XElement(rdlcNS + "Language", "en-US"))
xmlRdlc.Save(file)

(转换为 VB.NET 近似值,您的里程可能会有所不同,等等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多