我有一个包含以下结构的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");
我的代码会创建所有代码,但不会添加属性。
在有人要求大陆变量和国家/地区列表包含所需项目之前,我觉得不需要显示代码中的那一部分。
我在这里做错了什么?
修改
我设法对代码进行了核心处理,现在它的工作属性不是apearing,因为我给了node属性和element属性同名的名字,我现在可以工作了。
答案 0 :(得分: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);
此代码会将另一个<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>
答案 1 :(得分: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);
循环结束时
答案 2 :(得分:0)
您正在添加标记国家/地区,但该方法仅返回新创建元素的引用,然后您必须将其明确添加到文档