我正在查看一个如下所示的XML文件:

<test>
   <vehiclenumber>123</vehiclenumber>
   <form>
     <form_id>1</form_id>
     <datafield>
         <fieldnumber>1</fieldnumber>
         <data>
            <datawords>
               <datatext1>1234</datatext1>
               <mc2>656865</mc2>
            </datawords>
         </data>
      </datafield>
   </form>
</test>


目前,我有以下代码:

IEnumerable<XElement> elements = documentXDoc.Descendants("test");

            _fuelReceipts.AddRange(elements
                .Select(receipt => new Receipt()
                {
                    vehicle_number = receipt.Element("vehiclenumber") == null ? "" : receipt.Element("vehiclenumber").Value,
                    field = receipt.Descendants("datafield")
                    .Select(x => new Field()
                    {
                        field_number = x.Element("fieldnumber") == null ? "" : x.Element("fieldnumber").Value,
                        event_data = x.Descendants("data")
                        .Select(y => new FieldData()
                        {
                            event_data = y.Value
                        }).ToList()
                    }).ToList()
                }));
        }


这里的问题是,对于<data>,我不知道将有多少后代或它们将被称为什么。有没有办法在不知道此信息的情况下单独解析这些信息?现在,我会得到类似1234656865的信息,而实际上我想要一个对象中的1234和同一对象中另一个对象中的865865。

最佳答案

将内部“数据”选择更改为:

event_data = x.Descendants("data").Descendants().Where(d => !d.HasElements).Select(y => y.Value).ToList()


这将给出一个包含两个元素的string列表:1234和656865。您可以使用String.Join()方法轻松地将其连接到一个字符串:

event_data = String.Join(" ", x.Descendants("data").Descendants().Where(d => !d.HasElements).Select(y => y.Value).ToList())

关于c# - Linq to XML,不知道有多少后代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10074489/

10-12 07:20