Tag: xml

在C#中,有没有办法将XML节点添加到磁盘上的文件而不先加载它?

我在磁盘上有一个非常基本的XML结构/文件,它类似于: kdkdkdk kdkdkdkgffgfdgf kddsdsfsdkdkdk 如上所述,XML将位于磁盘上的外部文件中。 由于文件可能会变得相当大(实际上每隔几周会被“修剪”),我不想先加载XML文件来添加新节点…… 有没有办法添加这样的新节点? 它可以被添加到顶部/底部等,因为实际使用XML的进程无论如何都按时间戳对它进行排序。 我猜测粗略的方法是将节点作为文本附加..但是我认为这会在结束标记之后添加节点? 任何想法都感激不尽……大卫。

在特定位置插入XML节点

我有一个XML文件,我将它加载到Xmldocument中。 该文档的节点包含一些像这样的子节点 // I need to insert it // I need to insert this second time 这里somenode有一些子节点,其中第一个和最后一个子节点名称相同,除了第一个节点和最后一个节点之外的其他节点具有一些不同的名称(彼此相同)。 我正在创建一个在特定位置插入节点的function,我不确定标准但可能在中间。 如何在特定位置插入节点。 我正在使用XMLnode.appendChild方法进行插入 插入后是否需要重新排列/排序节点? 请建议。 如何确定结构是什么以及如何根据当前文档结构找到新节点的添加位置。

如何在C#中删除根元素

我是XML&C#的新手。 我想删除根元素而不删除子元素。 XML文件的结构如下。 KR04 02.05.2013 9:52:41 AUTOMATIC 22 我想根元素“dataroot”,所以它应该如下所示。 KR04 02.05.2013 9:52:41 AUTOMATIC 22 删除子元素看起来很简单,但我不知道如何只删除根元素。 下面是我到目前为止尝试过的代码。 XmlDocument xmlFile = new XmlDocument(); xmlFile.Load(“path to xml”); XmlNodeList nodes = xmlFile.SelectNodes(“//dataroot”); foreach (XmlElement element in nodes) { element.RemoveAll(); } 有没有办法只删除根元素? 不删除子元素? 谢谢你在advnace。

如何在SilverLight项目中使用XDocument类(C#)

我正在尝试创建一个Silverlight应用程序(第一次),它涉及从站点解析XML并显示信息。 为此,我在Windows XP Service Pack 3上使用Visual Studio 2008.我还安装了.NET Framework 3.5 SP1。 我的问题是我在互联网上看到的XML解析器都没有。 我的代码的顶部我有两行我认为是必要的(使用“System.xml;”并使用“System.linq;”)但XDocument,XMLReader,XMLDocument和我发现的任何其他行都不起作用,返回错误无法找到类型或命名空间。 我有.NET Framework。 关于这个问题我在互联网上完全没有任何改变。 有没有人有任何想法? 编辑: 我刚刚发现,当我在Silverlight项目的上下文之外打开文件时,它可以使用XDocument。 只有当我打开整个项目时才会出现问题 以下是一些显示问题的示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Xml.Linq; //Error 1 (See below) namespace LastfmAmazon { public partial class […]

有没有办法让XmlSerializer以定义的顺序输出xml?

目前我正在使用XmlSerializer来序列化和反序列化一个对象。 xml以未定义的顺序生成,这是可以理解的,但在比较对象的版本时会使其烦人,因为每次属性的顺序都不同。 因此,例如我不能使用普通的差异工具来查看任何差异。 有没有一种简单的方法可以每次以相同的顺序生成我的xml,而无需自己编写ReadXml和WriteXml方法? 我在类上有很多属性,并且不时地添加新的属性,所以宁愿不必编写然后维护该代码。 (C#.net 2.0)

XPath:如何按属性选择节点?

我有一个像这样的XML: #FF0000 #FF0200 #FF0300 #FF0500 [..] 我正在尝试按索引选择节点: XmlDocument ColorTable = new XmlDocument(); ColorTable.Load(HttpContext.Current.Server.MapPath(“~/App_Data/ColorTable.xml”)); int percentage = 2; string xpath = string.Format(@”//color[index={0}]”, percentage.ToString()); //string xpath = string.Format(@”//color[index=””{0}””]”, percentage.ToString()); //string xpath = string.Format(@”//color[index='{0}’]”, percentage.ToString()); var r = ColorTable.SelectSingleNode(xpath).Value; 我也尝试了注释版本,但它没有返回任何结果。 有什么建议吗?

忽略DOCTYPE .dtd,但.dtd文件必须仍然存在

我有一个处理HTTP请求的Web服务。 它接收的文档有一个嵌入的DOCTYPE,它指定.dtd文件。 我希望使用更新的XML架构validation文件,以便在较新的设备连接到我的服务时使用。 我可以成功忽略.dtd文件中的validation,但.dtd文件必须存在于我的本地硬盘驱动器上。 我想删除这些过时的文件,并没有找到办法。 我正在处理的示例XML文档: data 我用来打开文档的function: private void LoadXmlDoc(XmlTextReader myXmlTextReader) { XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.ValidationType = ValidationType.Schema; readerSettings.Schemas.Add(null, MyGoodSchemaFile); readerSettings.DtdProcessing = DtdProcessing.Ignore; readerSettings.XmlResolver = null; // Added as a test. readerSettings.ValidationEventHandler += ValidationEventHandle; XmlReader myXmlReader = XmlReader.Create(myXmlTextReader, readerSettings); XmlDocument myXmlDocument = new XmlDocument(); myXmlDocument.XmlResolver = null; // Added as a test. […]

.NET压缩XML以存储在SQL Server数据库中

目前,我们的.NET应用程序在内存中构建XML数据,并将其保存到SQL Server数据库中。 使用ToString()将XElement对象转换为字符串,然后将其存储在DB中的varchar(MAX)列中。 我们不想使用SQL XML数据类型,因为我们不需要任何validation,SQL不需要在任何阶段查询XML。 尽管此实现工作正常,但我们希望通过在存储之前压缩XML并在检索数据库后对其进行解压缩来减小数据库的大小。 有没有人有任何压缩XElement对象的示例代码(解压缩也会很棒)? 此外,我需要对数据库列的数据类型进行哪些更改,以便我们可以充分利用此压缩? 我再次调查了SQL Server 2005提供的XML数据类型,它提供的validation开销太高,我们无法考虑使用它。 此外,虽然它确实压缩了XML,但它没有.NET DeflateStream类那么多的压缩。 我已经通过将我们使用的XML写入磁盘,然后将comrpessed版本保存为新文件来测试DeflateStream类。 结果很棒,一个16kb的文件下降到一个3kb的文件,所以这就是让它在内存中工作并将结果数据保存到数据库的情况。 有没有人有任何示例代码来进行压缩,我应该将varcahr(MAX)colum更改为type to varbinary? 提前致谢

在.NET XML反序列化中,如何允许多态使用Array类型?

示例架构: … … 通过.NET运行此wsdl.exe会生成类似于以下内容的代码: [System.Xml.Serialization.XmlIncludeAttribute(typeof(Dog[]))] public partial class Dog { … } public partial class Cat { … } public partial class Foo { private string barField; private object bazField; } 似乎wsdl.exe试图“智能”并意识到我的ArrayOfDog实际上只是一个可以编码为C#数组的包装类型。 当在另一种数据类型中显式引用ArrayOfDog时,这可以正常工作。 但是,当多态地使用ArrayOfDog时(例如,作为xsd:anyType的替换),这会中断。 它似乎打破了,因为.NET运行时对名为“ArrayOfDog”的complexType一无所知 – 它基本上抛弃了这些信息,转而使用原生C#数组。 示例XML文档1: Hello … 示例XML文档2: Hello … … 文档#1由运行时正确反序列化。 我得到了一个类型为Foo的对象,其中包含Bar和Baz的正确反序列化字段。 文档#2被运行时错误地反序列化。 我得到一个类型为Foo的对象,其中有一个正确的反序列化字段用于Bar,但对于Baz字段,我得到System.XML.XMLNode []。 我的猜测是因为运行时对名为“ArrayOfDog”的实体的任何类型绑定都一无所知。 您可能认为XmlInclude指令“XmlIncludeAttribute(typeof(Dog []))”将处理此问题,但它似乎不起作用。 有人遇到过这个吗? 这里有优雅的解决方案吗? 我正在考虑使用的解决方法是将我的“ArrayOf”类型包装在另一种类型中,并将其包含在xsd:anyType的替换中。

从xml文件中删除版本

我正在使用XmlWriter创建一个类似Xml的格式。 但在输出中也有版本信息。 我的文件中不需要这个。 我怎样才能做到这一点? 有没有办法通过代码删除它?