2015-05-12 101 views
0

我正在嘗試執行WCF庫應用程序。我堅持要借閱一部書。 我想循環遍歷<book>中的所有節點,並且需要編輯一個「userid」節點,它具有與我的函數參數相同的「id」,並嘗試做類似的操作。更改選定的XML節點

我的XML結構

<catalog> 
    <book> 
    <id>bk101</id> 
    <title>XML Developer's Guide</title> 
    <author>Gambardella, Matthew</author> 
    <userid>789</userid> 
    </book> 
    <book> 
    <id>bk102</id> 
    <title>Midnight Rain</title> 
    <author>Ralls, Kim</author> 
    <userid>720</userid> 
    </book> 
    <book> 
    <id>bk103</id> 
    <title>Testowa</title> 
    <author>TESTTT, test</author> 
    <userid>666</userid> 
    </book> 
    <book> 
    <id>bk105</id> 
    <title>qwertyuiop</title> 
    <author>Qwe, Asd</author> 
    <userid></userid> 
    </book> 
</catalog> 

功能,以借一本書(現在,只是想設置有硬編碼值)

public void borrowBook(string s) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load("SampleDB.xml"); 
    XmlElement root = doc.DocumentElement; 
    XmlNodeList nodes = root.SelectNodes("catalog/book"); 
    foreach (XmlNode node in nodes) 
    { 
     if (node.Attributes["id"].Value.Equals(s)) 
     { 
      node.Attributes["userid"].Value = "new value"; 
     } 
    } 
    db.Save("SampleDB.xml"); 
} 

客戶端部分:

BookServiceReference.BookServiceClient client = 
new BookServiceReference.BookServiceClient(); 
BookServiceReference.Book[] x = client.borrowBook("bk101"); 
+0

什麼是你的問題?有些東西沒有按照你的預期工作,或者你想讓我們猜測? – Alex

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1

在對根元素(或文檔元素)進行採樣是catalog元素,因此可以這樣做XmlElement root = doc.DocumentElement; XmlNodeList nodes = root.SelectNodes("catalog/book");將永遠不會選擇任何內容。當然還有你的XML結構具有像book與子元素,如iduserid但沒有屬性的元素,所以你更願意使用這樣的代碼

foreach (XmlElement book in doc.SelectNodes(string.Format("catalog/book[id = '{0}']", s)) 
{ 
    book["userid"].InnerText = "new value"; 
} 
+0

噢好吧,它的工作,非常感謝! – Pietras