2011-12-12 98 views
1

我有這個簡單的XML:閱讀xml沒有cdata的元素值?

<AllBands> 
    <Band> 
    <Name ID="1234" started="1962">Beatles<![CDATA[lalala]]></Name> 
    <Last>1</Last> 
    <Salary>2</Salary> 
    </Band> 
    <Band> 
    <Name ID="222" started="1968">Doors<![CDATA[lalala]]></Name> 
    <Last>1</Last> 
    <Salary>2</Salary> 
    </Band> 
</AllBands> 

我想通過

using (var stream = new StringReader(result)) 
{ 
    XDocument xmlFile = XDocument.Load(stream); 
    var query = from c in xmlFile.Descendants("Band") select c; 

    foreach (XElement band in query) 
    { 
    if (band.Element("Name").Value ==...) // this expression is beatleslalala 
              // and not beatles alone... 

    } 
} 

爲什麼從Name元素

閱讀 「bealtes」 的價值?他爲什麼包括cdata?我怎樣才能得到「披頭士」只?

+0

你可能想看看Microsoft MDSN對這裏xmlCdata是什麼的解釋鏈接http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createcdatasection.aspx – MethodMan

+0

可能的重複[如何刪除XElement的CDATA標記?](http://stackoverflow.com/questions/3570339/how-do-i-remove-the-cdata-tag-of-an-xelement) –

回答

2

您的<Name>元素節點包含兩個子節點:文本節點和CDATA節點。

元素節點的Value是其子節點的所有值連接的值。

如果您想要文本節點的值,您需要獲取文本節點的Value,而不是元素。

請注意,在讀取XML文件時區別文本節點和CDATA節點是非常不尋常的。該文件的作者應該能夠使用他們喜歡的任何一個。

1

你有一個文本值和一個CDATA節點作爲名稱的孩子是原因。

如果你挖這個名字節點內你就可以找到兩個部分,但你可能要返工你的XML結構

<Name ID="1234" started="1962">Beatles<Lyrics><![CDATA[lalala]]></Lyrics></Name> 

由於它是,它的XSD將是亂。