2012-11-29 56 views
0

我有一個包含以下結構增加額外的標籤現有XML文件

<Planet> 
     <Continent name="Africa"> 
     <Country name="Algeria" /> 
     <Country name="Angola" /> 
      ... 
     </Continent> 
    </Planet> 

我需要添加到它的大陸標籤的其餘部分與有含城市的XML文件。 這是我的代碼:

 public static string continent; 
     public static List<string> countries = new List<string>(); 

     XmlDocument xDoc = new XmlDocument(); 
     xDoc.Load(@"D:\Projects IDE\Visual Studio\Tutorial\e-commerce\classModeling\GenerateXml file\GenerateXml file\bin\Debug\Planet.xml"); 

     XmlNode xNode = xDoc.CreateNode(XmlNodeType.Element, "Continent", ""); 
     XmlAttribute xKey = xDoc.CreateAttribute("name"); 
     xKey.Value = continent; 
     xNode.Attributes.Append(xKey); 
     xDoc.GetElementsByTagName("Planet")[0].InsertAfter(xNode , xDoc.GetElementsByTagName("Planet")[0].LastChild); 


     foreach (var country in countries) 
     { 
      XmlElement root = xDoc.CreateElement("Country"); 
      XmlAttribute xsKey = xDoc.CreateAttribute("name"); 
      xsKey.Value = country; 
      root.Attributes.Append(xKey); 

     }  
     xDoc.Save(@"D:\Projects IDE\Visual Studio\Tutorial\e-commerce\classModeling\GenerateXml file\GenerateXml file\bin\Debug\Planet.xml");  

我的代碼創建的所有標籤,但不添加屬性。

而在任何人詢問大陸變量和國家列表包含所需的項目之前,我只是覺得它不需要顯示代碼兩部分。

我在這裏做錯了什麼?

編輯

我設法corect代碼,現在,它的工作屬性未apearing因爲我給的節點屬性和元素都歸因我changd名稱相同的名稱,而現在它的工作原理。

+1

要告訴你在做什麼錯,錯就幫忙看看,當你運行該代碼,他們是如何與預期的不同結果是什麼。 – Mason

回答

1

好,在下面的循環

foreach (var country in countries) 
    { 
     XmlElement root = xDoc.CreateElement("Country"); 
     XmlAttribute xsKey = xDoc.CreateAttribute("name"); 
     xsKey.Value = continent; 
     root.Attributes.Append(xKey); 

    } 

您建立Country元素,但你不要用它做任何事情,root超出範圍。你有意將它添加到你的Continent標籤?

也許你想在你的循環

+0

是的,我是和當寫問題時,我意識到,並解決了這個問題,但現在我似乎無法得到的屬性出現我相信,因爲他們有相同的名字 –

+0

@NistorAlexandru你是什麼意思,你不能得到屬性出現?你有空的''標籤沒有任何屬性? –

0

您要添加標籤的國家,但該方法只給你回新創建的元素的引用,那麼你的末尾添加

xNode.AppendChild(root); 

明確地將它添加到文檔

2

這是非常容易使用LINQ創建XML到XML:

XDocument xdoc = XDocument.Load(path_to_xml); 
xdoc.Root.Add(
    new XElement("Continent", 
     new XAttribute("name", continent), 
     from country in countries 
     select new XElement("Country", new XAttribute("name", country)))); 
xdoc.Save(path_to_xml); 

此代碼將爲Planet元素添加另一個<Continent>元素(使用提供的國家/地區)。例如。用以下數據

continent = "Europe"; 
countries = new List<string>() { "Spain", "France", "Italy", "Belarus" }; 

輸出將是

<Planet> 
    <Continent name="Africa"> 
    <Country name="Algeria" /> 
    <Country name="Angola" /> 
    </Continent> 
    <Continent name="Europe"> 
    <Country name="Spain" /> 
    <Country name="France" /> 
    <Country name="Italy" /> 
    <Country name="Belarus" /> 
    </Continent> 
</Planet>