首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Linq XDoc -添加同名元素

C# Linq XDoc -添加同名元素
EN

Stack Overflow用户
提问于 2016-10-28 02:16:29
回答 2查看 557关注 0票数 0

我正在尝试使用c# Linq XDocument编写一个小的XML文件。

最后一个xml文件应该如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Asset InternalID="SOMEID" LastSaveDate="2016-10-28" LastSaveTime="01:01:33:00" AssetType="New">
    <type_metadata>
      <FIELD name="filename">SOMEID.MOV</FIELD>
      <FIELD name="duration">00:00:00:10</FIELD>
    </type_metadata>
  </Asset>
</Root>

这是我的代码:

代码语言:javascript
复制
XDocument doc = new XDocument(new XDeclaration("1.0", "UTF-8", null));
doc.Add(new XElement("Root"));
doc.Element("Root").Add(new XElement("Asset"));
doc.Element("Root").Element("Asset").Add(new XAttribute("InternalID", a.InternalID));
doc.Element("Root").Element("Asset").Add(new XAttribute("LastSaveDate", a.lastSaveDate));
doc.Element("Root").Element("Asset").Add(new XAttribute("LastSaveTime", a.lastSaveTime));
doc.Element("Root").Element("Asset").Add(new XAttribute("AssetType", a.AssetType));
doc.Element("Root").Element("Asset").Add(new XElement("type_metadata"));

doc.Element("Root").Element("Asset").Element("type_metadata").Add(new XElement("FIELD"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Add(new XAttribute("name","filename"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Value = a.filename;

doc.Element("Root").Element("Asset").Element("type_metadata").Add(new XElement("FIELD"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Add(new XAttribute("name", "duration"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Value = a.duration;

在我尝试插入第二个“字段”元素之前,一切都很好。做这件事的正确方法是什么?我已经做了一些研究,但我找不到一个简单的答案,它与我想要完成的事情直接相关。

EN

回答 2

Stack Overflow用户

发布于 2016-10-28 02:34:17

如果在将新的FIELD元素添加到父元素之前准备新元素,则会更容易:

代码语言:javascript
复制
var filename = new XElement("FIELD",
                    new XAttribute("name","filename"),
                    a.filename
               );
var duration = new XElement("FIELD",
                    new XAttribute("name","duration"),
                    a.duration
               );
doc.Element("Root").Element("Asset").Element("type_metadata").Add(field);
doc.Element("Root").Element("Asset").Element("type_metadata").Add(duration);
票数 1
EN

Stack Overflow用户

发布于 2016-10-28 03:19:39

这可以通过不同的方式来实现。我只是跟随你的做法。由于您有多个字段元素,所以需要在代码中稍加修改。下面的代码将按预期工作。

代码语言:javascript
复制
XDocument doc = new XDocument(new XDeclaration("1.0", "UTF-8", null));
doc.Add(new XElement("Root"));
doc.Element("Root").Add(new XElement("Asset"));
doc.Element("Root").Element("Asset").Add(new XAttribute("InternalID", "intID"));
doc.Element("Root").Element("Asset").Add(new XAttribute("LastSaveDate", "28.10.2016"));
doc.Element("Root").Element("Asset").Add(new XAttribute("LastSaveTime", "1.48PM"));
doc.Element("Root").Element("Asset").Add(new XAttribute("AssetType", "Laptop"));
doc.Element("Root").Element("Asset").Add(new XElement("type_metadata"));

doc.Element("Root").Element("Asset").Element("type_metadata").Add(new XElement("FIELD"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Add(new XAttribute("name", "filename"));
doc.Element("Root").Element("Asset").Element("type_metadata").Element("FIELD").Value = "a.txr";

doc.Element("Root").Element("Asset").Element("type_metadata").Add(new XElement("FIELD"));
doc.Element("Root").Element("Asset").Element("type_metadata").Elements().Last().Add(new XAttribute("name", "duration"));
doc.Element("Root").Element("Asset").Element("type_metadata").Elements().Last().Value = "00:12:98";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40297025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档