2017-03-04 10 views
0

私はXMLで以下の構造を有する:リストをLINQとともにXMLに追加するには?

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfNO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <No> 
    <Id>1</Id> 
    <Name>txt_1</Name> 
    <Text>some text</Text> 
    <Txt_relacionados> 
     <string>txt_4</string> 
     <string>txt_4</string> 
     <string>txt_4</string> 
    </Txt_relacionados> 
    <N>0</N> 
    <X>285</X> 
    <Y>31</Y> 
    <Externa>false</Externa> 
    <EM>false</EM> 
    <B>false</B> 
    <K>false</K> 
    <L1>false</L1> 
    <L2>false</L2> 
    <L3>false</L3> 
    <L4>false</L4> 
    <L5>false</L5> 
    <L6>false</L6> 
    <L7>false</L7> 
    <L8>false</L8> 
    <L9>false</L9> 
    <L10>false</L10> 
    <L11>false</L11> 
    <L12>false</L12> 
    <IP>0</IP> 
    </No> 

それは文字列のリストが含まれているので、私は「Txt_relacionados」要素を挿入するトラブルを抱えています。

私は、次のしているこの要素のVOで

:私はこのリストを挿入できるようにするには、以下のコードで行う必要があります

[XmlArray("Txt_relacionados"), XmlArrayItem("string", Type = typeof(String))] 
    private List<String> txt_relacionados = new List<String>(); 

    public List<String> Txt_relacionados 
    { 
     get { return txt_relacionados; } 
     set { txt_relacionados = value; } 
    } 

どのような変更?

public void inserir2(VoNo value) 
     { 
      RefreshXDoc(); 
      XElement no = XElement.Load(path); 

      XElement element = new XElement("No", 
       new XElement("Id", value.Id), 
       new XElement("Name", value.Name), 
       new XElement("Text", value.Text), 

       new XmlArrayAttribute("Txt_relacionados", value.Txt_relacionados), 

       new XElement("N", value.N), 
       new XElement("X", value.X), 
       new XElement("Y", value.Y), 
       new XElement("Externa", value.Externa), 
       new XElement("B", value.B), 
       new XElement("K", value.K), 
       new XElement("L1", value.L1), 
       new XElement("L2", value.L2), 
       new XElement("L3", value.L3), 
       new XElement("L4", value.L4), 
       new XElement("L5", value.L5), 
       new XElement("L6", value.L6), 
       new XElement("L7", value.L7), 
       new XElement("L8", value.L8), 
       new XElement("L9", value.L9), 
       new XElement("L10", value.L10), 
       new XElement("L11", value.L11), 
       new XElement("L12", value.L12), 
       new XElement("IP", value.IP)); 

      no.Add(element); 
      no.Save(path); 
     } 

ありがとう!!

+0

txt_relacionadosの文字列は、要素名とその値を特定できる特定の形式ですか?文字列の形式を共有できますか? –

+0

この配列内のすべての文字列は、次の形式をとります。 txt_(数字) 例:txt_5; txt_6; txt_10 –

+0

'new XmlArrayAttribute(" Txt_relacionados "、value.Txt_relacionados)'という行にどのような問題がありますか?あなたはリストをループし、リスト内の各項目の要素を作成することを検討しましたか? –

答えて

0

あなたは新しい要素Noを作成する前にTxt_relacionados要素を作成し、次にあなたがNoを作成しているときに適切な場所でTxt_relacionadosを渡す必要があります。

以下を考慮してください。

public void inserir2(VoNo value) 
{ 
    var rels = new XElement("Txt_relacionados"); 

    foreach (var x in value.Txt_relacionados) 
    { 
     var elem = new XElement("string", x); 
     rels.Add(elem); 
    } 

    RefreshXDoc(); 
    XElement no = XElement.Load(path); 

    XElement element = new XElement("No", 
    new XElement("Id", value.Id), 
    new XElement("Name", value.Name), 
    new XElement("Text", value.Text), 
    rels, 
    new XElement("N", value.N), 
    new XElement("X", value.X), 
    new XElement("Y", value.Y), 
    new XElement("Externa", value.Externa), 
    new XElement("B", value.B), 
    new XElement("K", value.K), 
    new XElement("L1", value.L1), 
    new XElement("L2", value.L2), 
    new XElement("L3", value.L3), 
    new XElement("L4", value.L4), 
    new XElement("L5", value.L5), 
    new XElement("L6", value.L6), 
    new XElement("L7", value.L7), 
    new XElement("L8", value.L8), 
    new XElement("L9", value.L9), 
    new XElement("L10", value.L10), 
    new XElement("L11", value.L11), 
    new XElement("L12", value.L12), 
    new XElement("IP", value.IP)); 

    no.Add(element); 
    no.Save(path); 
} 
+0

今はうまくいきました。ありがとう! –

関連する問題