0

次の構造を含むxmlファイルがあります

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

そこに都市を含む残りの大陸タグを追加する必要があります。これは私のコードです:

       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");    

私のコードはすべてのタグを作成しますが、属性を追加しません。

そして、誰かが大陸変数と国リストに必要な項目が含まれていると尋ねる前に、コード 2 のその部分を表示する必要はないと感じました。

ここで何が間違っていますか?

編集

私はなんとかコードを修正しましたが、ノード属性と要素属性の両方に名前を変更した同じ名前を付けたため、属性が表示されませんでした。

4

3 に答える 3

2

Linq to 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);

<Continent>このコードは、 (提供された国を含む)別の要素を要素に追加しPlanetます。例:次のデータ

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>
于 2012-11-29T22:59:41.807 に答える
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タグに追加するつもりだったのですか?

追加したいかもしれません

xNode.AppendChild(root);

あなたのループの終わりに

于 2012-11-29T22:50:54.400 に答える
0

タグの国を追加していますが、そのメソッドは新しく作成された要素の参照のみを返すため、ドキュメントに明示的に追加する必要があります

于 2012-11-29T22:53:01.217 に答える