【问题标题】:How to read CDATA XML Content如何读取 CDATA XML 内容
【发布时间】:2011-01-17 08:58:13
【问题描述】:

我有以下 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

【问题讨论】:

    标签: .net xml c#-2.0 whitespace cdata


    【解决方案1】:

    尝试ReadString 而不是ReadElementContentAsString

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

    【讨论】:

    • 它似乎与 ReadString 一起工作,但有什么区别?我想了解这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多