2011-12-12 103 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将是乱。