0

少年は私がLinqで密集しています...特にLinqからXMLへ。私はこれを回そうとしています...

<?xml version="1.0"?>
<Template>
    <TemplateData>
        <Data>
            <ACTIVE>A</ACTIVE>
            <FIRST_NAME> JASON</FIRST_NAME>
            <LAST_NAME>ABATE</LAST_NAME>
            <DOB>2/11/2013 12:01:36 PM</DOB>
            <PHONE/>
                </Data>
         </TemplateData>
</Template>

これに...

IEnumerable<DatModel>

DatModelがこれに等しいところ...

public class DatModel{
        public int ACTIVE{ get; set; }
        public int FIRST_NAME{ get; set; }
        public int LAST_NAME{ get; set; }
        public int DOB{ get; set; }
        public string PHONE{ get; set; }
}

これが私がやろうとしていることです...

    IEnumerable<DatModel> templates = (IEnumerable<DatModel>)
                            from templatesList in xDocument.Descendants("Template")
                            select new TemplateModel{
    Template = (
                                from template in templatesList.Element("TemplateData").Elements("Data")
    select new DataModel{
    ACTIVE = template.Element("ACTIVE").Value,
)}.ToList()
};

私のリストは空のまま表示され続けます。なぜそうなのかわかりません。私は何が間違っているのですか?

4

2 に答える 2

1

コードを少しクリーンアップしてコンパイルし、ToList()を追加すると、機能するようです。(匿名クラスを使用しました)

private static String s = @"<?xml version=""1.0""?>
    <Template>
    <TemplateData>
    <Data>
        <ACTIVE>A</ACTIVE>
        <FIRST_NAME> JASON</FIRST_NAME>
        <LAST_NAME>ABATE</LAST_NAME>
        <DOB>2/11/2013 12:01:36 PM</DOB>
        <PHONE/>
            </Data>
        </TemplateData>
    </Template>";

[Test]
public void myTest()
{

    XDocument xDocument = XDocument.Parse(s);

    var t = (from templatesList in xDocument.Descendants("Template")
            select new
                {
                    Template = (from template in templatesList.Element("TemplateData").Elements("Data")
                                select new
                                    {
                                        ACTIVE = template.Element("ACTIVE").Value
                                    }).ToList()
                }).ToList();

    Assert.AreEqual("A",t[0].Template[0].ACTIVE);

}

于 2013-02-14T17:11:39.560 に答える
0

モデルが正しく定義されていません(データ型が間違っています)。また、適切な名前付けの会話を使用します。

これを試して:

public class DatModel
{
    public string Active { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public string Phone { get; set; }
}


string xml = @"<?xml version=""1.0""?>
                <Template>
                    <TemplateData>
                        <Data>
                            <ACTIVE>A</ACTIVE>
                            <FIRST_NAME> JASON</FIRST_NAME>
                            <LAST_NAME>ABATE</LAST_NAME>
                            <DOB>2/11/2013 12:01:36 PM</DOB>
                            <PHONE/>
                                </Data>
                            </TemplateData>
                </Template>";

XDocument doc = XDocument.Parse(xml);
IEnumerable<DatModel> datModels =
    doc.Descendants("Data").Select(d => new DatModel
    {
        Active = (string) d.Element("ACTIVE"),
        FirstName = (string) d.Element("FIRST_NAME"),
        LastName = (string)d.Element("LAST_NAME"),
        Dob = (DateTime) d.Element("DOB"),
        Phone = (string)d.Element("PHONE"),
    });
于 2013-02-14T16:56:35.010 に答える