我现在正在学习,XmlDocument但我刚刚遇到XDocument,当我试图搜索他们的差异或好处时,我找不到有用的东西,你能告诉我为什么你会使用一个而不是另一个吗?
以下是我目前正在将XMLDocument转换为String的方法
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlTextWriter);
return stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是如果我有"((引用)我在属性中)它会逃脱它们.
例如:
<Campaign name="ABC">
</Campaign>
Run Code Online (Sandbox Code Playgroud)
以上是预期的XML.但它回来了
<Campaign name=\"ABC\">
</Campaign>
Run Code Online (Sandbox Code Playgroud)
我可以做String.Replace"\"但是这个方法好吗?有没有什么副作用?如果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);
Run Code Online (Sandbox Code Playgroud)
输出:
<root xmlns="whatever:name-space-1.0"><loner xmlns="" /></root>
Run Code Online (Sandbox Code Playgroud)
期望的输出:
<root xmlns="whatever:name-space-1.0"><loner /></root>
Run Code Online (Sandbox Code Playgroud)
是否有适用于XmlDocument代码的解决方案,而不是在将文档转换为字符串后出现的问题OuterXml?
我这样做的原因是看看我是否可以使用XmlDocument生成的XML匹配特定协议的标准XML.空白xmlns属性可能不会破坏或混淆解析器,但它在我已经看到的此协议的任何用法中也不存在.
当我从头开始构建XML时XmlDocument,该OuterXml属性已经通过换行符很好地缩进了所有内容.但是,如果我调用LoadXml一些非常"压缩"的XML(没有换行或缩进),那么输出会OuterXml保持这种状态.所以......
从一个实例中获取美化XML输出的最简单方法是XmlDocument什么?
我是C#的新手.我有XML文件(text.xml).我想读取它XmlDocument并将流存储在字符串变量中.
获取XML Document(org.w3c.dom.Document)的String表示形式的最简单方法是什么?这就是所有节点都在一条线上.
举个例子,来自
<root>
<a>trge</a>
<b>156</b>
</root>
Run Code Online (Sandbox Code Playgroud)
(这只是一个树形表示,在我的代码中它是一个org.w3c.dom.Document对象,所以我不能把它当作String)
至
"<root> <a>trge</a> <b>156</b> </root>"
Run Code Online (Sandbox Code Playgroud)
谢谢!
如何使用C#的XmlDocument读取XML属性?
我有一个XML文件,看起来有点像这样:
<?xml version="1.0" encoding="utf-8" ?>
<MyConfiguration xmlns="http://tempuri.org/myOwnSchema.xsd" SuperNumber="1" SuperString="whipcream">
<Other stuff />
</MyConfiguration>
Run Code Online (Sandbox Code Playgroud)
我如何读取XML属性SuperNumber和SuperString?
目前我正在使用XmlDocument,我使用XmlDocument获取其中的值GetElementsByTagName(),这非常有效.我只是无法弄清楚如何获得属性?
我正在优化自定义对象 - > XML序列化实用程序,它已完成并正常工作,这不是问题.
它通过将文件加载到XmlDocument对象中,然后递归遍历所有子节点来工作.
我认为也许使用XmlReader而不是XmlDocument加载/解析整个事情会更快,所以我也实现了那个版本.
算法完全相同,我使用包装类来抽象处理一个XmlNode与一个的功能XmlReader.例如,GetChildren方法yield返回子项XmlNode或SubTree XmlReader.
所以我写了一个测试驱动程序来测试这两个版本,并使用一个非平凡的数据集(一个900kb的XML文件,大约有1,350个元素).
但是,使用JetBrains dotTRACE,我发现XmlReader版本实际上比XmlDocument版本慢!XmlReader当我在迭代子节点时,似乎在读取调用中涉及一些重要的处理.
所以我要说这一切:
有什么优势/劣势XmlDocument和XmlReader,和你应该使用什么情况下要么?
我的猜测是,文件大小阈值XmlReader在性能上变得更经济,而且内存密集度更低.但是,该阈值似乎超过1MB.
我ReadSubTree每次都在调用处理子节点:
public override IEnumerable<IXmlSourceProvider> GetChildren ()
{
XmlReader xr = myXmlSource.ReadSubtree ();
// skip past the current element
xr.Read ();
while (xr.Read ())
{
if (xr.NodeType != XmlNodeType.Element) continue;
yield return new XmlReaderXmlSourceProvider (xr);
}
}
Run Code Online (Sandbox Code Playgroud)
该测试适用于单个级别的许多对象(即宽和浅) …
作为一些广泛的单元测试的基类的一部分,我正在编写一个辅助函数,它在C#(.NET)中递归地将一个XmlDocument对象的节点与另一个XmlDocument对象的节点进行比较.一些要求:
xsi:schemaLocation和xmlns:xsi,虽然我希望能够通过在哪些.InnerText,但不能同时.虽然我正在废弃一些东西:有没有人写过这样的代码,是否有可能在这里分享?
顺便说一下,你会把第一个和第二个文件称为什么?我一直把它们称为"源"和"目标",但它感觉不对,因为源是我希望目标看起来像,否则我抛出异常.