Читать значение элемента xml БЕЗ cdata? - PullRequest
1 голос
/ 13 декабря 2011

У меня есть этот простой xml:

<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>

Я хочу прочитать значение "bealtes" из элемента Name

по

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...

    }
}

это почему?почему он включает в себя cdata?Как я могу получить только "битлз"?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Ваш <Name> элементный узел содержит два дочерних узла: текстовый узел и узел CDATA.

Value узла элемента - это все значения его дочерних узлов, сцепленных.

Если вам нужно значение текстового узла, вам нужно получить Value текстового узла, а не элемента.

Обратите внимание, что довольно необычно различать текстовые узлы и узлы CDATA при чтенииXML-файлАвтор файла должен иметь возможность использовать то, что ему нравится.

1 голос
/ 13 декабря 2011

У вас есть текстовое значение и узел CDATA в качестве потомков имени, поэтому.

Если вы покопаетесь в узле имени, вы сможете найти две части, но, возможно, захотите переделать свойструктура xml

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

Как таковой, xsd для него будет грязным.

...