Tag: xmlreader

在xml文档中禁止使用DTDexception

在C#应用程序中尝试parsingXML文档时遇到此错误: “出于安全考虑,在这个XML文档中禁止使用DTD,要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法。 作为参考,以下代码的第二行发生exception: using (XmlReader reader = XmlReader.Create(uri)) { reader.MoveToContent(); //here while (reader.Read()) //(code to parse xml doc follows). 我对Xml的知识是相当有限的,我不知道DTD处理是什么,也不知道如何做错误消息build议。 有什么可能导致这个问题,以及如何解决它的帮助? 谢谢…

告诉StructureMap使用特定的构造函数

我有两个需要XPathDocument服务。 我希望能够定义XPathDocumnet命名实例以用于两个服务的configuration。 我也希望能够告诉StuctureMap使用XPathDocument哪个构造函数。 当我尝试获取XPathDocument的实例时,它告诉我它无法findXmlReader的插件types。 我想使用需要一个stringuri的构造函数的XML文件。 我似乎无法得到这个工作。 这是StructureMapconfiguration代码。 public class Service1 : IService1 { public Service1(XPathDocument document) {} } public class Service2 : IService2 { public Service2(XPathDocument document) {} } public class Registry1 : Registry { ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument1")); ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>() .CtorDependency<XPathDocument>() .Is(x => x.TheInstanceNamed("XPathDocument2")); ForRequestedType<XPathDocument>().AddInstances(x => { x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile1") .WithName("XPathDocument1"); x.OfConcreteType<XPathDocument>() .WithCtorArg("uri").EqualToAppSetting("XmlFile2") .WithName("XPathDocument2"); }); […]

决定何时使用XmlDocument与XmlReader

我正在优化自定义对象 – > XML序列化实用程序,这一切都已经完成并且工作,这不是问题。 它通过加载一个文件到一个XmlDocument对象,然后recursion遍历所有的子节点。 我想,也许使用XmlReader而不是有XmlDocument加载/parsing整个事情会更快,所以我也实现了该版本。 algorithm是完全一样的,我使用包装类来抽象处理XmlNode与XmlReader 。 例如, GetChildren方法的yield返回一个子XmlNode或一个SubTree XmlReader 。 所以我写了一个testing驱动来testing这两个版本,并且使用了一个非平凡的数据集(一个大约有1,350个元素的900kb XML文件)。 但是,使用JetBrains的dotTRACE,我看到XmlReader版本实际上比XmlDocument版本更慢! 当我遍历子节点时,似乎有一些重要的处理涉及XmlReader读取调用。 所以我就这么说: XmlDocument和XmlReader的优点/缺点是什么,在什么情况下你应该使用? 我的猜测是有一个文件大小的阈值, XmlReader在性能上变得更经济,以及更less的内存密集。 不过,这个门槛似乎高于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); […]

使用XmlWriter附加现有的XML文件

我已经使用下面的代码来创build一个XML文件: XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.Indent = true; xmlWriterSettings.NewLineOnAttributes = true; using (XmlWriter xmlWriter = XmlWriter.Create("Test.xml", xmlWriterSettings)) { xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("School"); xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Close(); } 我需要dynamic插入节点创build以下结构: <?xml version="1.0" encoding="utf-8"?> <School /> <Student> <FirstName>David</FirstName> <LastName>Smith</LastName> </Student> … <Teacher> <FirstName>David</FirstName> <LastName>Smith</LastName> </Teacher> … </School> 我该怎么做? 应该从键盘上读取“FirstName”和“LastName”的值,当然可以在任何时候input值。

在C#代码中parsing(大)XML的最好方法是什么?

我正在用C#编写一个GIS客户端工具,以便从服务器中检索基于GML的XML模式(下面的示例)中的“function”。 提取物限于100,000个function。 我很抱歉,最大的extract.xml可能会达到150兆字节左右,所以明显的DOMparsing器已经出来了我一直在试图决定之间的XmlSerializer和XSD.EXE生成的绑定 – 或 – XmlReader和手工制作的对象图。 或者也许还有一个我还没有考虑过的更好的方法? 像XLINQ,还是???? 请任何人指导我? 特别是关于任何给定方法的记忆效率。 如果没有,我将不得不“原型”这两个解决scheme并configuration他们并排。 在.NET中我是一个未知的大虾。 任何指导将不胜感激。 感谢您。 基思。 XML示例 – 高达100,000个,每个function高达234,600个坐标。 <feature featId="27168306" fType="vegetation" fTypeId="1129" fClass="vegetation" gType="Polygon" ID="0" cLockNr="51598" metadataId="51599" mdFileId="NRM/TIS/VEGETATION/9543_22_v3" dataScale="25000"> <MultiGeometry> <geometryMember> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>153.505004,-27.42196 153.505044,-27.422015 153.503992 …. 172 coordinates omitted to save space … 153.505004,-27.42196</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </geometryMember> </MultiGeometry> </feature>

如何在PHP中使用XMLReader?

我有以下的XML文件,该文件是相当大的,我还没有能够得到simplexml打开和阅读文件,所以我想在XML中没有成功的XMLReader <?xml version="1.0" encoding="ISO-8859-1"?> <products> <last_updated>2009-11-30 13:52:40</last_updated> <product> <element_1>foo</element_1> <element_2>foo</element_2> <element_3>foo</element_3> <element_4>foo</element_4> </product> <product> <element_1>bar</element_1> <element_2>bar</element_2> <element_3>bar</element_3> <element_4>bar</element_4> </product> </products> 我很遗憾没有find这个PHP的好教程,并希望看到如何获得每个元素内容存储在数据库中。

在C#中使用XmlReader读取Xml

我试图尽可能快地读取下面的XML文档,并让其他类pipe理每个子块的读取。 <ApplicationPool> <Accounts> <Account> <NameOfKin></NameOfKin> <StatementsAvailable> <Statement></Statement> </StatementsAvailable> </Account> </Accounts> </ApplicationPool> 但是,我试图使用XmlReader对象来读取每个帐户,随后“StatementsAvailable”。 你build议使用XmlReader.Read并检查每个元素,并处理它? 我想过分开我的类来正确处理每个节点。 因此,这是一个AccountBase类,它接受一个读取NameOfKin的XmlReader实例以及有关该帐户的其他几个属性。 然后,我想要通过陈述进行交stream,让另一个class级充分了解陈述(并随后将其添加到IList中)。 到目前为止,我已经通过XmlReader.ReadElementString()完成了“每类”部分,但我无法弄清楚如何告诉指针移动到StatementsAvailable元素,让我遍历它们,并让其他类读取每个这些proeprties 。 听起来很简单!