使用XMLReader和foreach进行XML解析

本文关键字:XML 解析 进行 foreach XMLReader 使用 | 更新日期: 2023-09-27 18:00:12

我想解析以下作为字符串输入的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 });
                        }

                    }

谢谢!

使用XMLReader和foreach进行XML解析

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方法对节点进行迭代。