2013-01-08 119 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

這個對我有用。請看看我編輯的答案 –