1

私のXMLファイル:

<myobject property1="foo" property2="bar">
    <property3>value1</property3>
    <property3>value1</property3>
    <property3>value1</property3>
</myobject>

私のC#コード:

List<MyObject> myObjectsInDB = (from f in xmlDoc.Descendants("myobject")
             select new MyObject()
             {
                    Property1 = f.Attribute("property1").Value,
                    Property2 = f.Attribute("property2").Value,
                    // Property3 = f.Element("property3").Value,
             }).ToList();

xml ファイルには、myobject 要素とその属性と共に、C# クラスに変換する必要がある 3 つの要素があることがわかります。xml 内の個々のオブジェクトにアクセスする最良の方法は何ですか? おそらく別の選択を実行できることはわかっていますが、それらにアクセスするより良い方法があるかどうか疑問に思っていたので、すべてを2回実行する必要はありません。

4

3 に答える 3

3
var result = xmlDoc.Descendants("myobject")
                .Select(m => new
                {
                    Property1 = m.Attribute("property1").Value,
                    Property2 = m.Attribute("property2").Value,
                    Property3 = m.Descendants("property3").Select(p3=>p3.Value).ToList()
                })
                .ToList();
于 2013-04-22T22:32:12.933 に答える
1
var myobjects = 
    from myobjectEl in xdoc.Elements("myobject")
    select new 
    {
        Property1 = myobjectEl.Attribute("property1").Value,
        Property2 = myobjectEl.Attribute("property1").Value,
        Property3Texts = 
            (from prop3El in myobjectEl.Elements("property3") 
            select prop3El.Value).ToList(),
    };

ところで:Descendants("x")名前「x」を持つすべての子要素をElements("x")返し、名前「x」を持つすべての直接の子を返します。

于 2013-04-22T22:34:46.603 に答える
0

前提: MyObject は既にクラス型として定義されています (以下を参照)。

次に、次のように xml をオブジェクトに逆シリアル化できます。

public static MyObject deserializeMyObject(){

var xmlString = @"<?xml version=""1.0"" ?><MyObject property1=""foo"" property2=""bar"">
    <property3>value1</property3>
    <property3>value1</property3>
    <property3>value1</property3>
</MyObject>";
var xdoc=XDocument.Parse(xmlString);
XmlSerializer _s = new XmlSerializer(typeof(MyObject));
var foo= (MyObject)_s.Deserialize(xdoc.CreateReader()); 
return foo;
}

//assumption about the structure of your MyObject class
public class MyObject{
 [XmlAttribute("property1")]
public string property1{get;set;}
[XmlAttribute("property2")]
public string property2 {get;set;}
 [XmlElement]
public string[] property3 {get;set;}
}

それが役に立てば幸い。

于 2013-04-22T22:57:20.827 に答える