2017-04-21 10 views
0

どのように私は私がHierarchicalLoopノードがHierarchicalLoopsノードに包まれている場合、それは簡単だろうけど、私は以来、選択肢がない複雑なXML

<Transaction ControlNumber="0001"> 
    <ST> 
     <ST01>271</ST01> 
    </ST> 
    <BHT> 
     <BHT01>022</BHT01> 
    </BHT> 
    <HierarchicalLoop LoopId="2000A" LoopName="Information Source Level" Id="1" ParentId=""></HierarchicalLoop> 
    <HierarchicalLoop LoopId="2000A" LoopName="Information Source Level" Id="2" ParentId=""></HierarchicalLoop> 
    <HierarchicalLoop LoopId="2000A" LoopName="Information Source Level" Id="3" ParentId=""></HierarchicalLoop> 
</Transaction> 

C#のクラスに以下のXMLをデシリアライズすることができますXML形式を変更することはできません。私は、Transactionに含まれているHierarchicalLoopノードに関するガイダンスを求めています。Transactionには、他の異なる子ノードもあります!また、XMLを解析するためにC#のXmlSerializerクラスも使用しています。ありがとう!

+0

1.入れXMLを。 2.このXMLはうまく構成されていません。タグは閉じられません。よく形成されたxmlを公開してください! –

+0

@AlexanderPetrov、私の悪い。私はすでに質問を編集しました。 – user2278488

答えて

1

私は既にこれを持っていますが、これは今解決されました。それは私が推測する愚かな質問の少しだった。

public class Transaction 
{ 
    [XmlAttribute("ControlNumber")] 
    public string ControlNumber { get; set; } 

    public ST ST { get; set; } 

    public BHT BHT { get; set; } 

    [XmlElement("HierarchicalLoop")] 
    public List<HierarchicalLoop> HierarchicalLoops { get; set; } 
} 
+0

うん、良い仕事。 –

0

は、クラスのセットを作成します。

public class Transaction 
{ 
    public ST ST { get; set; } 
    public BHT BHT { get; set; } 
    [XmlElement] 
    public List<HierarchicalLoop> HierarchicalLoop { get; set; } // maybe HierarchicalLoop[] 
    [XmlAttribute] 
    public string ControlNumber { get; set; } // maybe int 
} 
public class ST 
{ 
    public string ST01 { get; set; } // maybe int 
} 

public class BHT 
{ 
    public string BHT01 { get; set; } // maybe int 
} 

public class HierarchicalLoop 
{ 
    [XmlAttribute] 
    public string LoopId { get; set; } 
    [XmlAttribute] 
    public string LoopName { get; set; } 
    [XmlAttribute] 
    public string Id { get; set; } // maybe int 
    [XmlAttribute] 
    public string ParentId { get; set; } 
} 

使用例:イメージではなくテキストとして

Transaction transaction; 
var xs = new XmlSerializer(typeof(Transaction)); 

using (var fs = new FileStream("in.xml", FileMode.Open)) 
    transaction = (Transaction)xs.Deserialize(fs); 

using (var fs = new FileStream("out.xml", FileMode.Create)) 
    xs.Serialize(fs, transaction);