如何使用C#更改XML文件中某个元素的属性?
当从.NET中的XmlDocument生成XML时,第一次插入一个没有关联名称空间的元素时会出现一个空的xmlns属性; 这怎么能防止? 例: XmlDocument xml = new XmlDocument(); xml.AppendChild(xml.CreateElement("root", "whatever:name-space-1.0")); xml.DocumentElement.AppendChild(xml.CreateElement("loner")); Console.WriteLine(xml.OuterXml); 输出: <root xmlns="whatever:name-space-1.0"><loner xmlns="" /></root> 期望的输出: <root xmlns="whatever:name-space-1.0"><loner /></root> 是否有适用于XmlDocument代码的解决scheme,而不是在将文档转换为使用OuterXml的string之后发生的OuterXml ? 我这样做的理由是看我是否可以使用XmlDocument生成的XML匹配特定协议的标准XML。 空白的xmlns属性可能不会破坏或混淆parsing器,但它也没有出现在我看到这个协议的任何用法。
作为一些广泛的unit testing的基类的一部分,我正在编写一个帮助函数recursion地将一个XmlDocument对象的节点与C#(.NET)中的另一个进行比较。 这个的一些要求: 第一个文档是源文件,例如我想让XML文档看起来像什么。 因此,第二个是我想要find差异的一个,它不得包含不在第一个文档中的额外节点。 当发现太多明显的差异时,必须抛出一个exception,而且应该很容易理解。 子元素顺序很重要,属性可以以任何顺序。 有些属性是可以忽略的; 特别是xsi:schemaLocation和xmlns:xsi ,尽pipe我希望能够通过哪些。 名称空间的前缀必须在属性和元素中匹配。 元素之间的空白不相关。 元素将具有子元素或 InnerText ,但不是两者。 当我把一些东西拼凑在一起的时候: 有没有人写过这样的代码,可以在这里分享吗? 在旁边,你会把第一和第二个文件称为什么? 我一直把它们称为“源代码”和“目标”,但是由于源代码是我想要的目标 ,所以感觉不对,否则我会抛出一个exception。
我将一个string加载到包含以下结构的XML文档中: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Compile Include="clsWorker.cs" /> </ItemGroup> </Project> 然后im全部加载到xmldocument: XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); 那么会出现以下问题: XmlNode Node = xmldoc.SelectSingleNode("//Compile"); // return null 当我从根元素(项目)中删除xmlns属性工作正常,我怎么能改善我的SelectSingleNode返回相关的元素?
当我使用XmlDocument从头开始构buildXML时, OuterXml属性已经具有用换行符OuterXml缩进的所有内容。 但是,如果我在一些非常“压缩的”XML(不换行或缩进)上调用LoadXml ,那么OuterXml的输出将保持这种状态。 所以… 从XmlDocument实例获取美化XML输出的最简单方法是什么?
我现在正在学习XmlDocument但是我刚刚遇到了XDocument ,当我尝试search它们的差别或者好处的时候,我找不到有用的东西,请告诉我为什么你会使用另一个呢?