2010-02-16 74 views
1

我有以下XML文件:如何閱讀CDATA 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

嘗試ReadString而不是ReadElementContentAsString

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

似乎與ReadString工作,但有什麼區別?我想了解這個問題。 – Uwe 2010-02-16 12:32:38

+0

沒有機會知道? – Uwe 2010-02-22 17:25:58