Как читать CDATA XML-контент - PullRequest
       7

Как читать CDATA XML-контент

1 голос
/ 16 февраля 2010

У меня есть следующий XML-файл:

<?xml version="1.0" encoding="utf-8"?>
    <root>
<phrase id="test"><![CDATA[test]]></phrase>
<phrase id="test0"><![CDATA[test0]]></phrase>
<phrase id="test2"><![CDATA[test2]]></phrase>
<phrase id="test3">test3</phrase>
<phrase id="test4">
    <![CDATA[test4
LINEBREAK]]>
</phrase>
<phrase id="test5">
LINEBREAK</phrase>
<phrase id="test6"><![CDATA[test6]]></phrase>
<phrase id="test7">
    <![CDATA[test7
ANOTHER LINEBREAK]]>
</phrase>
</root>

Как видите, emelemts МОЖЕТ содержать разделы cdata для правильного переноса переносов и пробелов. Проблема заключается в том, что, если я использую следующий код, перенос строки и вкладки ДО и ПОСЛЕ CData также фиксируются.

Поэтому я решил использовать IgnoreWhitespace=true, но это пропускает каждый второй узел. Почему это так?

XmlReaderSettings sett = new XmlReaderSettings();
sett.IgnoreWhitespace = true;
using (XmlReader r = XmlTextReader.Create(filePath, sett))
{
    while (r.ReadToFollowing("phrase"))
    {
        string attrib = r.GetAttribute("id").ToLowerInvariant();
        string content = r.ReadElementContentAsString();
    }
}

Обратите внимание, что мой проект ограничен .net 2.0

1 Ответ

1 голос
/ 16 февраля 2010

Попробуйте ReadString вместо ReadElementContentAsString:

while (r.ReadToFollowing("phrase"))
{
    string attrib = r.GetAttribute("id").ToLowerInvariant();
    string content = r.ReadString();
}
...