向xml元素添加更多值

时间:2013-01-08 15:55:00

标签: c# xml linq linq-to-xml

我的xml看起来像这样。我试图在Author元素中添加更多值时被困了一段时间。

我像这样加载它:

XDocument cdata = XDocument.Parse(text);

这里是示例xml:

<a xmlns="http://www" version="5.050">  
  <Books>
   <Author> Poe,Edgar Allen Homer Walden</Author>
   <Address></Address>
   <State></State>
 </Books>
 <SYSTEM type="OTHER">
   <ORGANIZATION id="" />
 </SYSTEM>
 <HMDA_INFO is_hoepa="N" is_hoepa_manual="N" />
</a>

只是旁注'a'不一定总是根元素名称,有时它的b或c所以我不能用根名称。

尝试这样做以访问作者,但我得到的序列不包含任何元素:

XDocument cdata = XDocument.Parse(text);
var addElement = cdata.Descendants("Books").First();
addElement.SetAttributeValue("Authors", "insert this.");

2 个答案:

答案 0 :(得分:1)

以下代码将访问作者节点

var addElement = cdata.Descendants("Books").First();
var authodNode = addElement.Element("Author")

下面你可以找到我做过的测试

enter image description here

答案 1 :(得分:0)

你有两个问题。首先,Author是一个元素,而不是属性。第二 - 你忘记了在a元素中声明的命名空间:

XDocument cdata = XDocument.Parse(text);
XNamespace ns = "http://www";
var books = cdata.Descendants(ns + "Books").First();
var author = books.Element(ns + "Author"); 
author.Value = "insert this." + authors.Value;

或者,如果您只想将新属性添加到authors元素:

books.Element(ns + "Author").SetAttributeValue(ns + "Foo", "insert this.");