我已经阅读了两个在这里之间的比较.这主要是与内存和速度有关的性能问题. 我有几个XML文档的大小超过100-300 k.我注意到将这些信息加载到XDocument而不是XmlDocument对象时存在一些滞后. 这两个对象之间是否存在严重的性能差异? 他们是否以不同的方式访问XML的内容? 使用一串XML(首选)或有区别时? 这些对象的结束用途是在相关对象上运行查询(XPath或linq,取决于). 解决方案 xmldocument是文档对象模型的纯管理插入.没有任何com组件的互动互动,例如MSXML库.否则任何主张都是虚假的.整个Xlinq API集成为一种与XML交互的友好方式,并在.NET Framework中介绍Linq. 如果您想最大程度地提高性能并且使用XPath感到舒适,请尝试使用Xmldocument并使用编译XPath表达式. 其他解决方案 XmlReader是.NET中最低的API,所有其他XML API在场景中使用.自然
以下是关于 xmldocument 的编程技术问答
我正在尝试将(可能)畸形的HTML加载到Xmldocument对象中,但是它因XMlexceptions而失败...因为有额外的打开/关闭标签,并且畸形的XML标签(例如),例如而不是 如何使XML使用数据中的所有错误来解析?在解析之前,我可以使用任何XML验证器来纠正这些错误吗?还是处理例外可以解析什么? 解决方案 html敏捷性包将解析HTML,而不是XHTML,并且非常宽容.如果您使用过XmlDocument. ,对象模型将很熟悉 其他解决方案 您可能想查看这个问题. 基本上是在美丽的港口和HTML敏捷包之间的某个地方. 其他解决方案 您不太可能能够构建具有这种畸形结构的Xmldocument. Xmldocument(据我所知)要求XML内容遵守适当的嵌套和闭合语法. 但是,您怀疑可以用XMLReader解析此.如果遇到某些严重的错误,它仍然可能会引发异常,但是根据MSDN文档,它至少可以披露错误的位置
说我有这个构造函数: /// /// Example comment. /// public SftpConnection(string host, string username, string password, int port) {...} 具有这些过载: public SftpConnection(string host, string username, string password) : this(host, username, password, 22) { } public SftpConnection(string host, string username, int port) : this(host, username, "", port) { } public SftpConnection(string host, string username) : thi
我在控制之外有一个Xmldocument,其结构如下: ...minor amount of data... 我还有另一个xmldocument,也在我的控件之外,它具有以下结构: ..very large amount of data... 我需要格式的xmldocument: ...minor amount of data... ..very large amount of data... 我不想制作parent2的副本.如何在不复制parent2的情况下获得所需的结构?我相信这意味着 oParent1.DocumentElement.AppendChild(oParent1.ImportNode(oParent2.DocumentElement, true)); 是不可能的.
我有一个我从文件中读取的Xmldocument.该文件是Unicode,并具有newline字符'\ n'.当我写回xmldocument时,它具有newline字符'\ r \ n'. 这是代码,非常简单: XmlTextWriter writer = new XmlTextWriter(indexFile + ".tmp", System.Text.UnicodeEncoding.Unicode); writer.Formatting = Formatting.Indented; doc.WriteTo(writer); writer.Close(); xmlWriterSettings有一个属性,newlinechars,但我无法在"作者"上指定设置参数,它是只读的. 我可以使用指定的XMLWriterSettings属性来创建XMLWriter,但是XMLWriter没有格式化属性,从而导致文件根本没有线路破坏. 因此,简而言之,我需要编写一个带有n
我需要用包含多个名称空间的根元素创建XmlDocument.我正在使用C#2.0或3.0 这是我的代码: XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("JOBS", "http://www.example.com"); doc.AppendChild(root); XmlElement job = doc.CreateElement("JOB", "http://www.example.com"); root.AppendChild(job); XmlElement docInputs = doc.CreateElement("JOB", "DOCINPUTS", "http://www.example.com"); job.AppendChild(docInputs); XmlElement docInput = doc.CreateElement("JOB"
我正在寻找可以构建使用名称空间的XML文档的Java代码.我似乎无法使用我的普通最喜欢的工具所以希望有人可以帮助我. 解决方案 我不确定您要做什么,但是我使用 jdom 我的XML发行,它支持名称空间(当然). 代码: Document doc = new Document(); Namespace sNS = Namespace.getNamespace("someNS", "someNamespace"); Element element = new Element("SomeElement", sNS); element.setAttribute("someKey", "someValue", Namespace.getNamespace("someONS", "someOtherNamespace")); Element element2 = new Element("SomeElement", Namespace.getNamespace("someNS",
以多线程的方式访问COM对象接口(例如IXMLDocument>>>>>和IXMLNode)时,似乎存在一些内存问题.其他COM interfaces可能会共享这个问题,但是我的"研究"并不是很深,因为我也必须继续我当前的项目.创建TXMLDocument并通过单个线程上的IXMLDocument和IXMLNode等接口来操作它,但是在多线程方法中,当一个线程创建TXMLDocument对象并且其他人操纵其使用越来越多的内存时. CoInitializeEx(nil, COINIT_MULTITHREADED)在每个线程中都被调用,但徒劳.似乎每个线程在获得接口时都会分配一些内存并且无法释放它,但是每个线程一次分配一次 - 至少对于某个接口 - 例如DocumentElement或ChildNodes - 因此,创建对象的一个工作线程不会导致可见内存泄漏.但是动态创建的线程的行为都相同,最终消耗了过程内存. 这是我的完整测试应用程序Delphi7 form作为SCCE,它试图显
我编写了一些使用XmlDocument对象加载XML文档的代码,以计算其节点.这是方法: XmlDocument xml = new XmlDocument(); xml.Load(textBox1.Text); XmlNodeList nodes = xml.SelectNodes("//File"); foreach (XmlNode node in nodes) { number_of_childs++; } 我面临的问题是,在导入大文件时,它会达到700MB的RAM.如果然后尝试在文件上执行一些操作,或者什至从中读取以显示其数据在ListView>中,则该应用程序采用2GB的RAM.因此,我想知道,是否有一种方法可以关闭XmlDocument并释放其内存,从而释放RAM.就像它忘记了从内存中删除其内容一样. 解决方案 否. XmlDocument类未实现IDisposable,因此没有办法强迫它随意发布其资源.如果您确实需要立即释放XmlDocument
我在使用 xmldocument 处理大量XML文件时遇到了严重的麻烦.这个想法是从约5000 .xml文档(每个20 MB)提取某些数据,该数据以文本格式保存,然后导入到mySQL db中.这个任务应该每天完成. 我的问题是,在处理每个XML文件后,系统内存不会释放它.因此,所有文档都在加油,直到所有RAM被占领并且应用程序开始非常缓慢(一旦硬盘驱动器开始帮助系统内存). 我正在使用已经创建的源代码,因此不可能更改为XMLReader等其他类,因此我被 xmldocument . . XML加载功能称为这样: foreach (string s in xmlFileNames) { i++; if (mytest.LoadXml(s)) mytest.loadToExchangeTables(); } 函数看起
我相信我的某些代码使用xmldocument类的内存泄漏. 我的程序在Windows 6.1.4设备(C#)上运行,并从另一台服务器上的数据库读取,以查看设备上安装的任何程序是否需要卸载,然后从Xmldocument读取以获取程序的名称那是不可安装的.然后,该程序在必要时相应地匹配列表和卸载.这个过程无限地循环并在后台运行,但我注意到的是,随着时间的流逝,内存逐渐爬升,并且该程序最终捕获了OutOfMemoryException. 如果我评论所有内容,并且在循环中什么都不做,则记忆将始终保持在2MB左右.如果我留下除了以下代码之外的所有内容,那么内存使用情况每分钟左右上升.05兆字节.这些结果是让循环睡1秒钟.常规睡眠速度约为10分钟.关于可能导致泄漏以及是否与xmldocument类有任何关系的任何想法? foreach (string programName in uninstallPrograms) { XmlDocument xmlDoc1 = new
作为一些广泛的单元测试的基类的一部分,我正在编写一个辅助功能,该功能将一个Xmldocument对象的节点与C#(.NET)中的另一个对象进行了比较.一些要求: 第一个文档是源,例如我想要XML文档的样子.因此,第二个是我想找到的差异,它不得包含 extra nodes不在第一个文档中. 在发现太多的显着差异时必须施加例外,应该通过人类瞥见描述来轻松理解. 子元素顺序很重要,属性可以按任何顺序进行. 某些属性是可忽视的;特别是xsi:schemaLocation和xmlns:xsi,尽管我想通过哪个. 名称空间的前缀必须在属性和元素中匹配. 元素之间的空格无关紧要. 元素将 有子元素或 InnerText,但不是两者. 当我一起废些东西时:有人编写了这样的代码,可以在这里分享吗? 在旁边,您将如何称呼第一和第二个文档?我一直将它们称为"源"和"目标",但是感觉不错,因为 source 是我想要的 target ,否则我会投掷例外. 解决方案 Micr
我正在寻找一个.NET库,该库可以从无效的HTML代码中生成干净的XML树,理想情况下是system.xml.xmldocument. IE.当浏览器面对这种情况时,浏览器会做出最好的努力猜测,维修和替换,并产生假装的Xmldocument.图书馆也应保持良好的维护. :) 我意识到这是很多(太多?)要问的,我希望有任何有用的潜在客户. Java似乎有很多实现的方法,但我宁愿不会生成自己的绑定.到目前为止,我已经找到了我尚未构建或测试过任何一个,但是从(稀疏)文档和罕见的更新中,它们似乎并不是我想要的.因此,您在这些选择中或从过去的经验中有什么建议. 解决方案 html敏捷包被高度评价.它肯定会进行解析/最佳猜测等. 该模型与xmldocument完全相似,包括用于查询的选择nodes等. 如果您需要XHTML输出,则有一个OptionOutputAsXml flag;我假设将其设置为true并调用Save在xhtml中产生.
我有一个Winform项目,在Microsoft Framework 3.5上创建. 用户可能已经安装了Windows 7或Windows XP,以及Office 2007或更高版本. 我正在研究一个过程,以获取剪贴板数据并放入C#DataTable. 我已经创建了一种从剪贴板获取原始数据并将其上传到数据表中的方法. 但是在某些情况下,Excel数据显示一个值,但在内部有另一个值: 我正在研究一种从Excel获取原始数据的方法: string XmlFmt = "XML Spreadsheet"; var clipboard = Clipboard.GetDataObject(); if (clipboard.GetDataPresent(XmlFmt)) { var clipData = clipboard.GetData(XmlFmt); StreamReader streamReader = new StreamReader((Memory