2

リストを XML 文字列に保存するために、Linq to XML を使用しています。

取得しようとしているxml文字列:

<people>
<name>xxx</name>
<age>23</age>
</people>
<people>
<name>yyy</name>
<age>25</age>
</people>

C# コード:

List<Peoples> peopleList = new List<Peoples>(); 
peopleList.Add(new Peoples() { Name = "xxx", Age = 23 });
peopleList.Add(new Peoples() { Name = "yyy", Age = 25 });
var people (from item in peopleList
select new XElement("people",
                                new XAttribute("name", item.Name),
                                new XAttribute("age", item.Age)
                            ));

var peopleに変換するにはどうすればよいXML stringですか?

ありがとうございました。


編集:

私が考えることができるのは、ルート要素をxmlに追加し、 and を空の文字列に置き換えることです。


Jignesh Thakker ソリューションは次のように機能します。

string str = people.Select(x => x.ToString()).Aggregate(String.Concat); 
4

4 に答える 4

3

XML文字列を取得する方法は2つあります。

解決策1: XMl文字列を取得するには、XmlElementをXDocumentオブジェクトに配置する必要があります。で試してみてください

  List<Peoples> peopleList = new List<Peoples>(); 
  peopleList.Add(new Peoples() { Name = "xxx", Age = 23 });
  peopleList.Add(new Peoples() { Name = "yyy", Age = 25 });
  var people =  (from item in peopleList
  select new XElement("people",
                            new XElement("name", item.Name),
                            new XElement("age", item.Age)
                        ));

  XElement root = new XElement("Peoples");
  root.Add(people);
  XDocument xDoc = new XDocument(
                         new XDeclaration("1.0", "utf-8", "yes"),
                         root);
  string str = xDoc.ToString();

Xml文字列を取得するにはルート要素が必要です。

出力:

<Peoples>
  <people>
    <name>xxx</name>
    <age>23</age>
  </people>
  <people>
    <name>yyy</name>
    <age>25</age>
  </people>
</Peoples> 

ここで、名前と年齢はXElementと見なされます。問題のコードとして、あなたは言及しXAttributeました。名前と年齢をと見なしたい場合は、以下のコードを試してくださいXAttribute

   List<Peoples> peopleList = new List<Peoples>(); 
   peopleList.Add(new Peoples() { Name = "xxx", Age = 23 });
   peopleList.Add(new Peoples() { Name = "yyy", Age = 25 });
   var people =  (from item in peopleList
                           select new XElement("people",
                            new XAttribute("name", item.Name),
                            new XAttribute("age", item.Age)
                        ));

    XElement root = new XElement("Peoples");
    root.Add(people);
    XDocument xDoc = new XDocument(
                         new XDeclaration("1.0", "utf-8", "yes"),
                         root);


    string str = xDoc.ToString(); 

出力:

<Peoples>
  <people name="xxx" age="23" />
  <people name="yyy" age="25" />
</Peoples>

解決策2:次のXml文字列が必要な場合は、以下を試してくださいList<XElement>

string str = people.Select(x => x.ToString()).Aggregate(String.Concat);

XElementが名前と年齢に使用されている場合、出力:

  <people>
    <name>xxx</name>
    <age>23</age>
  </people>
  <people>
    <name>yyy</name>
    <age>25</age>
  </people>

名前と年齢にXAttributeが使用されている場合、出力:

  <people name="xxx" age="23" />
  <people name="yyy" age="25" />

それがうまくいくことを願っています。ソリューション2は、必要なものに最も適しています。

于 2012-09-19T05:47:30.723 に答える
2

「名前」と「年齢」を属性ではなく要素にする必要があります。目的の出力に最上位の要素がないためです。これは、2 つの要素の順次出力です。

void Main()
{
    List<Peoples> peopleList = new List<Peoples>(); 
    peopleList.Add(new Peoples() { Name = "xxx", Age = 23 });
    peopleList.Add(new Peoples() { Name = "yyy", Age = 25 });
    var people =(from item in peopleList
    select new XElement("people",
                                    new XElement("name", item.Name),
                                    new XElement("age", item.Age)
                                ));
    Console.WriteLine (people.First());
    Console.WriteLine (people.Last());
}

class Peoples
{
    public string Name {get;set;}
    public int Age {get;set;}
}

編集#1:目的の出力が単一のxml出力ではないことを強調したいと思います。ルート オブジェクトを追加すると、かなり近くなります。これを試して:

XElement root = new XElement("root");
foreach (var item in peopleList)
{
    root.Add(new XElement("people",
                                new XElement("name", item.Name),
                                new XElement("age", item.Age)
                            ));         
}
Console.WriteLine (root.ToString());
于 2012-09-19T03:50:52.807 に答える
0

多分これはあなたが必要とするものを与えるでしょう

List<Peoples> peopleList = new List<Peoples>();
            peopleList.Add(new Peoples() { Name = "xxx", Age = 23 });
            peopleList.Add(new Peoples() { Name = "yyy", Age = 25 });

            var people = new XElement("Peoples", peopleList.Select(p => 
                                                             new XElement("people",
                                                                          new XAttribute("name", p.Name),
                                                                          new XAttribute("age", p.Age)
                                                                 ))).ToString();

これにより、次の XML が生成されます。

<Peoples>
  <people name="xxx" age="23" />
  <people name="yyy" age="25" />
</Peoples>
于 2012-09-19T03:55:53.373 に答える
0
class Program
{
    static void Main(string[] args)
    {
        List<Person> peopleList = new List<Person>(); 
        peopleList.Add(new Person() { Name = "xxx", Age = 23 });
        peopleList.Add(new Person() { Name = "yyy", Age = 25 });

        XElement xmlDoc = new XElement("people", from p in peopleList
                                                 select new XElement("person",
                                                                     new XElement("name", p.Name),
                                                                     new XElement("age", p.Age)));

        Console.WriteLine(xmlDoc.ToString());
        Console.ReadKey();
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

生産します:

<people>
  <person>
    <name>xxx</name>
    <age>23</age>
  </person>
  <person>
    <name>yyy</name>
    <age>25</age>
  </person>
</people>
于 2012-09-19T04:09:21.290 に答える