2

我正在使用 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>
4

1 回答 1

3

您需要指定命名空间。将“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 近似值,您的里程可能会有所不同等)

于 2011-10-28T14:03:04.667 回答