是否可以插入两个名称相同但属性不同的子节点?
我想创建一个像这样的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<text>
<languages>
<language id =1>English</language>
<language1 id=2>Slovenian</language1>
</languages>
<strings>
<line id=1>
<string lid=1>camera</string>
<string lid=2>kamera</string1>
</line>
<line id=2>
<string lid=1>lens</string>
<string1 lid=2>leka</string1>
</line>
</strings>
</text>
我正在尝试在 C#(Windows 窗体应用程序)中使用以下代码:
XmlDocument xmldoc = new XmlDocument();
XmlDeclaration xmldec = xmldoc.CreateXmlDeclaration("1.0", null, null);
xmldoc.AppendChild(xmldec);
XmlElement root = xmldoc.CreateElement("text");
xmldoc.AppendChild(root);
XmlElement lang = xmldoc.CreateElement("languages");
XmlElement languages = xmldoc.CreateElement("language");
languages.SetAttribute("id", "1");
languages.InnerText = "English";
lang.PrependChild(languages);
languages.SetAttribute("id", "2");
languages.InnerText = "Slovenian";
lang.PrependChild(languages);
XmlElement lines = xmldoc.CreateElement("strings");
XmlElement line = xmldoc.CreateElement("line");
XmlElement lineinner = xmldoc.CreateElement("string");
line.SetAttribute("id", "1");
lineinner.SetAttribute("lid", "1");
lineinner.InnerText = "some english text";
line.AppendChild(lineinner);
line.SetAttribute("id", "1");
lineinner.SetAttribute("lid", "2");
lineinner.InnerText = "some slovenian text";
line.AppendChild(lineinner);
lines.AppendChild(line);
root.AppendChild(lang);
root.AppendChild(lines);
Metodi.SerializeXMLToXML(xmldoc);
我最终得到以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<text>
<languages>
<language id="2">Slovenian</language>
</languages>
<strings>
<line id="2">
<string lid="2">some slovenian text</string>
</line>
</strings>
</text>
在每个下一个 AppendChild() 替换前一个之后,有什么方法可以实现这??
I would like to create an XML file like this:
<?xml version="1.0" encoding="UTF-8"?>
<text>
<languages>
<language id =1>English</language>
<language1 id=2>Slovenian</language1>
</languages>
<strings>
<line id=1>
<string lid=1>camera</string>
<string lid=2>kamera</string1>
</line>
<line id=2>
<string lid=1>lens</string>
<string1 lid=2>leka</string1>
</line>
</strings>
</text>
I am trying with the following code in C# (Windows Forms Application):
XmlDocument xmldoc = new XmlDocument();
XmlDeclaration xmldec = xmldoc.CreateXmlDeclaration("1.0", null, null);
xmldoc.AppendChild(xmldec);
XmlElement root = xmldoc.CreateElement("text");
xmldoc.AppendChild(root);
XmlElement lang = xmldoc.CreateElement("languages");
XmlElement languages = xmldoc.CreateElement("language");
languages.SetAttribute("id", "1");
languages.InnerText = "English";
lang.PrependChild(languages);
languages.SetAttribute("id", "2");
languages.InnerText = "Slovenian";
lang.PrependChild(languages);
XmlElement lines = xmldoc.CreateElement("strings");
XmlElement line = xmldoc.CreateElement("line");
XmlElement lineinner = xmldoc.CreateElement("string");
line.SetAttribute("id", "1");
lineinner.SetAttribute("lid", "1");
lineinner.InnerText = "some english text";
line.AppendChild(lineinner);
line.SetAttribute("id", "1");
lineinner.SetAttribute("lid", "2");
lineinner.InnerText = "some slovenian text";
line.AppendChild(lineinner);
lines.AppendChild(line);
root.AppendChild(lang);
root.AppendChild(lines);
Metodi.SerializeXMLToXML(xmldoc);
And i end up with the following result:
<?xml version="1.0" encoding="UTF-8"?>
<text>
<languages>
<language id="2">Slovenian</language>
</languages>
<strings>
<line id="2">
<string lid="2">some slovenian text</string>
</line>
</strings>
</text>
After every next AppendChild() replaces the previous is there any way to achieve this??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
每次重新初始化它是一种解决方案:
节点只能有一个父节点,因此你的问题。
不过,解决此问题的更好方法可能是使用 XML 文字。我注意到 C# 不支持 XML 文字。这并没有改变这样一个事实:您可以使用 XML 序列化或循环等以更好的方式编写此代码。Re-initialize it every time is one solution:
Nodes can only have one parent, hence your problem.
A nicer way to resolve this, though, might be to use XML literals.It has come to my attention that C# does not support XML literals. This doesn't change the fact that you can write this in a nicer way using XML serialization or loops and such.