我需要反序列化XML文件。到目前为止,我已成功使用[XmlElement]
属性。它很棒。我绊倒的地方是嵌套元素。例如<root><level1><set1><data1>x</data1><data2>y</data2></set1>.....</root>
我只希望捕获第1组中的data2。我已经尝试了[XmlArray]和[XmlArrayItem],但没有多少运气。我可能是错的,但我不认为List是合适的,因为我只想要class属性的一个值。有一个更好的例子,对我的问题更具体。在其中我将关注捕获嵌套在<NAME>
中的<H_DATA_1>
内的<HEADER>
元素我已经成功地从第一个<METADATA>
内部捕获了我需要的内容。 <PRODUCTION_SET>
以及从<METADATA>
内的第二个<PRODUCING_ENTITY>
拉出我需要的东西,但是我的方法似乎无法处理标头标记内的额外嵌套。
XML
<PRODUCTION_SET>
<METADATA>
<M_DATA_1>X</M_DATA_1>
<M_DATA_2>Y</M_DATA_2>
<M_DATA_3>Z</M_DATA_3>
</METADATA>
<PRODUCING_ENTITY>
<METADATA>
<PM_Data_1>X<PM_Data_1>
<PM_Data_2>Y<PM_Data_2>
</Metadata>
<HEADER>
<H_DATA_1>
<NAME>I NEED THIS NAME</NAME>
</H_DATA_1>
<H_DATA_2>
<NAME>I ALSO NEED THIS NAME</NAME>
<CODE>DO NOT WANT THIS CODE</CODE>
</H_DATA_2>
<H_DATA_3>
<NAME>I DO NOT NEED THIS NAME</NAME>
</H_DATA_3>
</HEADER>
</PRODUCING_ENTITY>
<PRODUCING_ENTITY>
.
.
.
</PRODUCING_ENTITY>
.
.
.
.
</PRODUCING_SET>
类
[Serializable()]
[XmlRoot("PRODUCTION_SET")]
public class ProductionSet
{
[XmlElement("METADATA")]
public List<Metadata> Metadata { get; set; }
[XmlElement("PRODUCING_ENTITY")]
public List<Producing_Entity> ProducingEntity { get; set; }
}
public class Metadata
{
[XmlElement("M_DATA_1")]
public string mData1 { get; set; }
[XmlElement("M_DATA_2")]
public string mdata2 { get; set; }
}
public class Producing_Entity
{
[XmlElement("METADATA")]
public List<ProdMeta> ProdMeta { get; set; }
[XmlElement("HEADER")]
public List<Header> Header { get; set; }
}
public class ProdMeta
{
[XmlElement("PM_DATA_1")]
public string pmData1{ get; set; }
}
public class Header
{
[XmlElement("H_DATA1")]
[XmlElement("NAME")]
public string H_DATA1_Name { get; set; }
[XmlElement("H_DATA2")]
[XmlElement("NAME")]
public string H_DATA2_Name { get; set; }
}
答案 0 :(得分:1)
您还需要更多一步:
public class Header
{
[XmlElement("H_DATA1")]
public H_DATA1 HData1 { get; set; }
....
}
public class H_DATA1
{
[XmlElement("NAME")]
public String Name { get; set; }
}