标签: xmlreader

在C#中使用XmlReader读取Xml

我正在尝试尽可能快地阅读以下Xml文档,并让其他类管理每个子块的读取.

<ApplicationPool>
    <Accounts>
        <Account>
            <NameOfKin></NameOfKin>
            <StatementsAvailable>
                <Statement></Statement>
            </StatementsAvailable>
        </Account>
    </Accounts>
</ApplicationPool>
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试使用XmlReader对象来读取每个帐户,然后使用"StatementsAvailable".你建议使用XmlReader.Read并检查每个元素并处理它吗?

我想过分离我的类来正确处理每个节点.所以这是一个AccountBase类,它接受一个XmlReader实例,该实例读取NameOfKin和该帐户的其他几个属性.然后我想要通过语句进行交互,让另一个类填写有关语句(并随后将其添加到IList).

到目前为止,我通过执行XmlReader.ReadElementString()来完成"每个类"部分,但是我无法训练如何告诉指针移动到StatementsAvailable元素并让我遍历它们并让另一个类读取每个proeprties .

听起来很简单!

c# xml xmlreader

90
推荐指数
5
解决办法
32万
查看次数

如何在PHP中使用XMLReader?

我有以下XML文件,文件相当大,我无法让simplexml打开并读取文件所以我正在尝试XMLReader没有成功的PHP

<?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>
Run Code Online (Sandbox Code Playgroud)

遗憾的是,我没有为PHP找到一个很好的教程,我很想知道如何将每个元素内容存储在数据库中.

php xml parsing xmlreader simplexml

74
推荐指数
4
解决办法
12万
查看次数

决定何时使用XmlDocument vs XmlReader

我正在优化自定义对象 - > XML序列化实用程序,它已完成并正常工作,这不是问题.

它通过将文件加载到XmlDocument对象中,然后递归遍历所有子节点来工作.

我认为也许使用XmlReader而不是XmlDocument加载/解析整个事情会更快,所以我也实现了那个版本.

算法完全相同,我使用包装类来抽象处理一个XmlNode与一个的功能XmlReader.例如,GetChildren方法yield返回子项XmlNode或SubTree XmlReader.

所以我写了一个测试驱动程序来测试这两个版本,并使用一个非平凡的数据集(一个900kb的XML文件,大约有1,350个元素).

但是,使用JetBrains dotTRACE,我发现XmlReader版本实际上比XmlDocument版本慢!XmlReader当我在迭代子节点时,似乎在读取调用中涉及一些重要的处理.

所以我要说这一切:

有什么优势/劣势XmlDocumentXmlReader,和你应该使用什么情况下要么?

我的猜测是,文件大小阈值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# xmldocument xmlreader xml-serialization

61
推荐指数
2
解决办法
5万
查看次数

在C#代码中解析(大)XML的最佳方法是什么?

我正在用C#编写一个GIS客户端工具,以从服务器中检索基于GML的XML模式(下面的示例)中的"功能".提取物限制为100,000个功能.

我猜测最大的extract.xml可能会增加大约150兆字节,所以很明显DOM解析器已经出来我一直试图在XmlSerializerXSD.EXE生成的绑定之间做出决定--OR-- XmlReader和手工制作的对象图.

或者也许有一种更好的方式我尚未考虑过?像XLINQ,或????

请任何人指导我吗?特别是关于任何给定方法的存储效率.如果不是,我将不得不"原型化"两种解决方案,并将它们并排分析.

我是.NET中的一个原始对象.任何指导将不胜感激.

感谢您.基思.


示例XML - 最多100,000个,每个功能最多234,600个coords.

<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>
Run Code Online (Sandbox Code Playgroud)

c# xml xmlreader xml-serialization

59
推荐指数
4
解决办法
6万
查看次数

DTD禁止在xml文档中例外

我在尝试解析C#应用程序中的XML文档时遇到此错误:

"出于安全原因,此XML文档中禁止使用DTD.要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法."

作为参考,异常发生在以下代码的第二行:

using (XmlReader reader = XmlReader.Create(uri))
{
    reader.MoveToContent(); //here

    while (reader.Read()) //(code to parse xml doc follows).
Run Code Online (Sandbox Code Playgroud)

我对Xml的了解非常有限,我不知道DTD处理是什么,也不知道如何做错误消息的建议.有关可能导致此问题以及如何解决问题的任何帮助?谢谢...

c# xmlreader xml-parsing

41
推荐指数
3
解决办法
7万
查看次数

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

我有两个需要的服务XPathDocument.我希望能够定义XPathDocumnet在两个服务的配置中使用的命名实例.我也希望能够告诉StuctureMap使用哪个构造函数XPathDocument.当我尝试获取XPathDocument它的实例时告诉我它无法找到插件类型XmlReader.我想使用需要字符串uri的构造函数来获取xml文件.我似乎无法让这个工作.这是StructureMap配置代码.

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");
    });
}
Run Code Online (Sandbox Code Playgroud)

c# structuremap xmlreader xpathdocument

38
推荐指数
1
解决办法
5257
查看次数

没有Unicode字节顺序标记.无法切换到Unicode

我正在用XSD编写XML验证器.

以下是我所做的,但当验证器到达该行时,while (list.Read())它会给我错误

没有Unicode字节顺序标记.无法切换到Unicode.

任何人都可以帮我解决这个问题吗?

public class Validator
    {
        public void Validate(string xmlString)
        {
            Boolean bRet = true;
            string xmlPath = @"C:\x.xml";
            string xsdPath = @"C:\general.xsd";

            XmlReaderSettings Settings = new XmlReaderSettings();
            Settings.Schemas.Add("", xsdPath);
            Settings.ValidationType = ValidationType.Schema;
            Settings.ValidationEventHandler += 
               new ValidationEventHandler(SettingsValidationEventHandler);

            XmlReader list = XmlReader.Create(xmlPath, Settings);
            //StringBuilder output = new StringBuilder();
            while (list.Read()) 
            {
            }
            //File.WriteAllText(@"D:\Output.xml", output.ToString());
        }
        static void SettingsValidationEventHandler(object sender,
                                                   ValidationEventArgs e)
        {
            if (e.Severity == XmlSeverityType.Warning)
            {
                MessageBox.Show( "WARNING: ");
                MessageBox.Show(e.Message);
            }
            else if (e.Severity == …
Run Code Online (Sandbox Code Playgroud)

c# xml xsd xmlreader character-encoding

38
推荐指数
1
解决办法
4万
查看次数

XmlReader - 自闭元素不会触发EndElement事件?

我在.NET中使用XmlReader来使用循环解析XML文件:

while (xml.Read()) {
   switch xml.NodeType {
     case XmlNodeType.Element:
      //Do something
     case XmlNodeType.Text:
      //Do something
     case XmlNodeType.EndElement:  
      //Do something
   }
}
Run Code Online (Sandbox Code Playgroud)

我想知道以下XML代码是否产生一些EndElement节点是否正常?请注意/>之前缺少的空格,但我不认为这是问题所在.

<date month="November" year="2001"/>
<zone name="xml"/>
Run Code Online (Sandbox Code Playgroud)

是否有不同的NodeType或属性来指示自闭元素?

.net c# xml xmlreader .net-2.0

36
推荐指数
1
解决办法
2万
查看次数

System.Xml.XmlReader(C#和.Net)中的当前行号

有谁知道我如何获得System.Xml.XmlReader的当前行号?我试图记录文件中我找到Xml元素的位置.

.net c# xml xmlreader line-numbers

24
推荐指数
1
解决办法
1万
查看次数

为什么"根级别的数据无效.第1行,位置1".对于XML文档?

我正在使用第三方DLL,它通过互联网传输XML文档.

为什么DLL会抛出以下异常?

根级别的数据无效.第1行,第1位.(有关完整的异常文本,请参见下文.)

以下是XML文档的前几行:

<?xml version="1.0" encoding="utf-8"?> <REQUEST>   <HEADER>
    <REQUESTID>8a5f6d56-d56d-4b7b-b7bf-afcf89cd970d</REQUESTID>
    <MESSAGETYPE>101</MESSAGETYPE>
    <MESSAGEVERSION>3.0.2</MESSAGEVERSION>
Run Code Online (Sandbox Code Playgroud)

例外:

System.ApplicationException was caught
      Message=Unexpected exception.
      Source=FooSDK
      StackTrace:
           at FooSDK.RequestProcessor.Send(String SocketServerAddress, Int32 port)
           at Foo.ExecuteRequest(Int32 messageID, IPayload payload, Provider prov)
           at Foo.SendOrder(Int32 OrderNo)
      InnerException: System.Xml.XmlException
           LineNumber=1
           LinePosition=1
           Message=Data at the root level is invalid. Line 1, position 1.
           Source=System.Xml
           SourceUri=""
           StackTrace:
                at System.Xml.XmlTextReaderImpl.Throw(Exception e)
                at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
                at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
                at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
                at System.Xml.XmlTextReaderImpl.Read()
                at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
                at System.Xml.XmlDocument.Load(XmlReader reader)
                at System.Xml.XmlDocument.LoadXml(String xml) …
Run Code Online (Sandbox Code Playgroud)

.net xml xmldocument xmlreader

23
推荐指数
2
解决办法
10万
查看次数