【问题标题】:XML parsing using XMLReader and foreach使用 XMLReader 和 foreach 解析 XML
【发布时间】:2016-12-11 04:15:14
【问题描述】:

我想解析以下作为字符串输入的 XML 文件。

 <leadtools_form_processing_fields>
       <pages>
          <page number="1" dpix="300" dpiy="300">
             <fields>
                <field type="Leadtools.Forms.Processing.TextFormField, Leadtools.Forms.Processing>
                   <values>
                      <value name="LastName" />
                      <value bounds="232, 875, 736, 76 Pixel" />
                      <value dropOut="None" />
                      <value regex_pattern="" />
                      <value ocr_text_type="FlowText" />
                      <value enable_icr="False" />
                      <value enable_ocr="True" />
                      <value text_field_type="Character" />
                   </values>
                </field>
                <field type="Leadtools.Forms.Processing.TextFormField, Leadtools.Forms.Processing>
                   <values>
                      <value name="MiddleName" />
                      <value bounds="1112, 875, 475, 76 Pixel" />
                      <value dropOut="None" />
                      <value regex_pattern="" />
                      <value ocr_text_type="FlowText" />
                      <value enable_icr="False" />
                      <value enable_ocr="True" />
                      <value text_field_type="Character" />
                   </values>
                </field>
            </fields>
        </page>
     </pages>
</leadtools_form_processing_fields>

我猜 XMLReader 提供的效率比 XMLDocument 高得多。如何获取“values”元素中元素的值并使用 XMLReader 和 foreach 解析其他元素。

我试过这个:(一种伪代码)

using (XmlReader reader = XmlReader.Create(xmlData))
            {
                while (reader.Read())
                {
                    reader.ReadToFollowing("pages");

                    foreach (XmlElement Page in Pages)
                    {
                        pageNumber = Page.GetAttribute("number");

                        reader.ReadToFollowing("fields");
                        foreach (XmlElement field in fields)
                        {   
                            type = Page.GetAttribute("type");
                            reader.ReadToFollowing("values");

                            foreach (XmlElement value in values)
                            {
                                name = value.GetAttribute("name");
                                string bounds = value.GetAttribute("bounds");
                                string boundValues[] = bounds.Split(,);
                                x = boundValues[0];
                                y = boundValues[1];
                                width = boundValues[2];
                                height = boundValues[3];

                            }
                            formFields.Add(new FormField() { Name = name, X = x, Y = y, Width = width, Height = height, PageNumber = pageNumber, FormFieldType = type });

                        }


                    }

谢谢!

【问题讨论】:

    标签: c# foreach xml-parsing xmlreader


    【解决方案1】:

    XmlReader 无法使用 foreach 循环。您可以使用类似于以下的代码:

    using (XmlReader reader = XmlReader.Create(filepath))
    {
        while (reader.ReadToFollowing("page"))
        {
            pageNumber = reader.GetAttribute("number");
    
            while (reader.ReadToFollowing("field"))
            {
                type = reader.GetAttribute("type");
    
                reader.ReadToFollowing("value");
                name = reader.GetAttribute("name");
    
                reader.ReadToFollowing("value");
                string bounds = reader.GetAttribute("bounds");
                string[] boundValues = bounds.Split(' ');
                x = boundValues[0].Trim(',');
                y = boundValues[1].Trim(',');
                width = boundValues[2].Trim(',');
                height = boundValues[3];
    
                formFields.Add(new FormField() { Name = name, X = x, Y = y, Width = width, Height = height, PageNumber = pageNumber, FormFieldType = type });
            }
        }
    }
    

    在while循环中使用ReadToFollowing方法遍历节点。

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2011-11-17
      相关资源
      最近更新 更多