2014-09-24 59 views
0
<root xmlns:test="url" test:attr1="10" test:attr2="someValue> 
    <elementwrapper> 
     <secondElementwrapper> 
      <element>someValue</element> 
      <differentelement>anotherValue</differentelement> 
     </secondElementwrapper> 
    </elementwrapper> 
</root> 

以下类是由:省略elementwrappers和获取XML根值

public class XmlEntities 
    { 
     [XmlRoot("root")] 

     public class Root 
      { 
       [XmlElement("elementwrapper")] 
       public Elementwrapper Elementwrapper{ get; set; } 
      } 

     public class Elementwrapper 
      { 
       [XmlElement("secondElementwrapper")] 
       public SecondElementwrapper SecondElementwrapper{ get; set; } 
      } 

     public class Values 
      { 
       [XmlElement("element")] 
       public string Element{ get; set; } 

       [XmlElement("differentelement")] 
       public string Differentelement{ get; set; } 
      } 
    } 

这里是我进行序列化和反序列化XML:

var reader = XmlReader.Create(url); 
var xmlRecord = new XmlEntities.Root(); 

try 
    { 
     var serializer = new XmlSerializer(typeof(XmlEntities.Root)); 
     xmlRecord = (XmlEntities.Root)serializer.Deserialize(reader); 

     reader.Close(); 
    } 
catch (Exception e) { } 
  • 我想访问xmlRecord.Element而不是xmlRecord.Elementwrapper.Values.Element
  • 怎么办我得到的测试:attr1值?*

如果我删除类Elementwrapper和根,xmlRecord返回null。 [XmlAttribute]在Root类里面得到attr1的值对我不起作用。

谢谢!

编辑: 该元素是一个复制/粘贴错误的做法。修正了。我还补充道:测试attr1的盈方,忘了那个。

编辑: 加入以下作为SGK提到的,根类里面,让我来访问属性

[XmlAttribute("attr1", Namespace = "url")] 
public string attr { get; set; } 

编辑:而且是有办法的类不同的地图?所以我可以直接访问xmlRecord.Element?

编辑:@TonyStark似乎我想要接近不同的方式,但是,然后再次这已经工作,我只需要访问元素槽节点(xmlRecord.elementwrapper.secondelementwrapper.element)为那些是想知道。

要访问根的属性我简单地使用:xmlRecord.attr后,我添加了其上面写的xmlattribute。

回答

0
  1. 我想访问xmlRecord.Element而不是xmlRecord.Elementwrapper.Values.Element - 基于你有XML结构,Deserialize并访问<element>价值和<differentelement>价值 - 你需要经过根 - > elementwrapper - > secondElementwrapper。
  2. 我如何获得attr1值? - 添加[XmlAttribute("attr1")]根类里面

然后,[XmlElement("<elementwrapper>")]应该是[XmlElement("elementwrapper")]否则,当你Deserialize你总是会得到空,因为没有匹配的元素。

见下

public class XmlEntities 
{ 
    [XmlRoot("root")] 
    public class Root 
    { 
     [XmlElement("elementwrapper")] 
     public Elementwrapper Elementwrapper { get; set; } 

     [XmlAttribute("attr1", Namespace="url")] 
     public string attr1; 
    } 

    public class Elementwrapper 
    { 
     [XmlElement("secondElementwrapper")] 
     public SecondElementwrapper SecondElementwrapper { get; set; } 
    } 

    public class SecondElementwrapper 
    { 
     [XmlElement("element")] 
     public string Element { get; set; } 

     [XmlElement("differentelement")] 
     public string Differentelement { get; set; } 
    }   
} 
+0

的因素是复制/粘贴错误行为。修正了。 我还补充说:attr1和2的测试盈方,忘了那个。 是否有另一种方式直接访问xmlRecord的值?有没有办法以不同的方式映射它? – user3603865 2014-09-24 10:04:10

+0

更新回答使用命名空间 – 2014-09-24 10:11:16

+0

命名空间允许我访问属性,谢谢! – user3603865 2014-09-24 10:28:05