2

誰かが以下の場所を手伝ってくれませんか(クエリを作成するのに苦労しています)

XML

<?xml version="1.0" encoding="UTF-8"?>
<response id="1545346343">
 <date>2013-10-01 12:01:55.532999</date>
 <status>
        <current>open</current>
        <change_at>16:00:00</change_at>
 </status>
 <message>Market is open</message>
</response>

クラス

public class MarketClockResponse
{
    public Response response { get; set; }
}
public class Response
{
    public string Id { get; set; }
    public string date { get; set; }
    public Status status { get; set; }
    public string message { get; set; }
}
public class Status
{
    public string current { get; set; }
    public string change_at { get; set; }
}

私の解決策:

public void example3()
{
    var xElem = XElement.Load("test.xml");

    var myobject = xElem.Descendants("response").Select(
        x => new MarketClockResponse
        {
              //Struggling to proceed from here  
        });
} 
4

3 に答える 3

2

要素 (xml のルート)responseから要素を選択しようとしています。response代わりに、この要素を直接使用してください。

var responseElement = XElement.Load(path_to_xml);
var statusElement = responseElement.Element("status");
var myobject = new MarketClockResponse
{
    response = new Response
    {
        Id = (string)responseElement.Attribute("id"),
        date = (string)responseElement.Element("date"),
        message = (string)responseElement.Element("message"),
        status = new Status
        {
            current = (string)statusElement.Element("current"),
            change_at = (string)statusElement.Element("change_at")
        }
    }
};
于 2013-10-02T14:54:50.050 に答える
1
var myobject = xElem.Descendants("response").Select(
        x => new MarketClockResponse
        {
              response = new Response
             {
                Id = x.Attribute("id").Value,
                //.....
                //populate all the attributes
             }
        });
于 2013-10-02T14:56:47.163 に答える
1

まず第一に、XML は宣言などを含むドキュメントであるため、XDocument.Load代わりにを使用します。XElement.Load

var xDoc = XDocument.Load("Input.txt");

次に、同じものを複数回クエリしないように、2 つのローカル変数を設定します。

var resp = xDoc.Root;
var status = resp.Element("status");

そして、それらを使用して必要なものを取得します。

var myobject = new MarketClockResponse
{
    response = new Response
    {
        Id = (string)resp.Attribute("id"),
        date = (string)resp.Element("date"),
        message = (string)resp.Element("message"),
        status = new Status
        {
            current = (string)status.Element("current"),
            change_at = (string)status.Element("change_at")
        }
    }
};
于 2013-10-02T14:58:47.807 に答える