我正在使用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>
答案 0 :(得分: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近似,您的里程可能会有所不同等)