是否可以插入两个名称相同但属性不同的子节点?

发布于 2024-12-26 00:49:36 字数 2362 浏览 1 评论 0原文

我想创建一个像这样的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别想她 2025-01-02 00:49:36

每次重新初始化它是一种解决方案:

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 = xmldoc.CreateElement("language");
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 = xmldoc.CreateElement("string");
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 文字。 我注意到 C# 不支持 XML 文字。这并没有改变这样一个事实:您可以使用 XML 序列化或循环等以更好的方式编写此代码。

Re-initialize it every time is one solution:

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 = xmldoc.CreateElement("language");
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 = xmldoc.CreateElement("string");
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);

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文