如何在这种情况下使用Xelement

时间:2014-06-24 10:14:09

标签: .net xml xml-serialization xelement xml-deserialization

我必须获得这种xml:

<ps>
    <pr>
        <name>name1</name>
        <comp>
            <type>CB</type>
            <attr>
                <value>0</value>
            </attr>
        </comp>
    </pr>
    <sep>sep1</sep>
    <pr>
        <name>name2</name>
        <comp>
            <type>RB</type>
            <attr>
                <value>1</value>
            </attr>
        </comp>
    </pr>
    <sep>sep2</sep>
    <pr>
        <name>name3</name>
        <comp>
            <type>CoM</type>
            <attr>
                <value>2</value>
            </attr>
        </comp>
    </pr>
    <sep>sep3</sep>
</ps>

你可以看到我有ps作为所有人的父母,之后我有序列中的pr和sep,我想维持这个序列。 在我使用XmlElement之前,它显示了所有sep togetehr和所有pr。 我想我需要使用XElement,但我不知道如何使用它们。有人可以解释一下或写一段代码,以便了解我将获得这种xml。

我尝试做的是:(不给我想要的东西)

[XmlRoot(ElementName = "attr")]
public class Attr
{     
    [XmlElement("type")],
    public string Type { get; set; }

    [XmlElement("value")]
    public int Value { get; set; }

}

    [XmlRoot(ElementName = "pr")]
          public class Pr
        {
            [XmlElement("name")]
            public string Name { get; set; }

            [XmlElement("comp")]
            public List<Comp> Comp { get { return b3; } }
            private readonly List<Comp> b3 = new List<Comp>();

        }
 [XmlRoot(ElementName = "sep")]
    public class Sep
    {
        [XmlElement("sep")]
        public string Sep { get; set; }

    }

 public void Main()
{

            Ps pc = new Ps()
              {
                Pr = { new Pr { Name = "Name1",  Component = { new Comp { Type = "Type1", Attr = { new Attr { Type = "Com" } } } } }, { new Pr { Name = "Name2" ,Comp = { new Comp { Type = "Type2", Attr = { new Attr { Type = "Sl" ....And so On} } } } } } }
             ,
                Sep = { new Sep { Separators = "sep1" ..and so on} }  

              };
            var xml = pc.ToXml(); 
}

但是这段代码没有给出我想要的序列。它首先在xml中显示所有sep togther然后ps togther(不按顺序) 我已经使用XElement实现了它,但它是静态的,不使用我的类对象,如&#34; Name&#34;,&#34; Comp&#34;,Type,Value等。 它是这样的:

var el =   new XElement("ps",
                       new XElement("pr",
                           new XElement("name", "name1"),
                           new XElement("comp",
                               new XElement("type", "CB"),
                               new XElement("attr",
                                   new XElement("value", 0)
                               )
                           )
                       ),//And so on..

所以它根本不使用Class Objects。我们认为她喜欢这个XElement(&#34;名称&#34;,&#34; name1&#34;)但我希望这样的事情ps Object1 = new ps();Object1.pr[0].Name= "name1";

如何实现这一点,它应该保持pssep的相同序列?

0 个答案:

没有答案