2013-01-08 79 views
1

我有看起来像这样的xml。试图向Author元素添加更多值时,我一直陷入困境。为xml元素添加更多值

我加载它,像这样:

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> 

只是一个侧面说明“一”不一定总是根元素的名字,有时它的B或因此我不能通过根名称去。

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

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

回答

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; 

或者,如果你想只是为了新属性添加到作者元素:

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

我想在'Poe,Edgar Allen'之前在元素作者中添加更多值,但也要保留现有值。 – Jt2ouan

+0

@ERead OK,更新第一个样品 –

+0

谢谢伟大的工程! – Jt2ouan

1

下面的代码将访问作者节点

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

下面你可以找到一个测试,我已经做了

enter image description here

+0

我在运行时得到一个错误说序列不包含任何元素 – Jt2ouan

+0

这个对我有用。请看看我编辑的答案 –