Jes*_*ess 11 .net c# xml xmldocument cdata
我有一点XML如下:
<section>
<description>
<![CDATA[
This is a "description"
that I have formatted
]]>
</description>
</section>
Run Code Online (Sandbox Code Playgroud)
我正在使用它,curXmlNode.SelectSingleNode("description").InnerText但值返回
\r\n This is a "description"\r\n that I have formatted代替
This is a "description" that I have formatted.
有没有一种简单的方法从CDATA部分获得那种输出?离开实际的CDATA标签似乎让它以同样的方式返回.
Jim*_*ert 18
您可以使用Linq读取CDATA.
XDocument xdoc = XDocument.Load("YourXml.xml");
xDoc.DescendantNodes().OfType<XCData>().Count();
Run Code Online (Sandbox Code Playgroud)
以这种方式获得价值非常容易.
以下是MSDN的一个很好的概述:http://msdn.microsoft.com/en-us/library/bb308960.aspx
对于.NET 2.0,您可能只需通过Regex传递它:
string xml = @"<section>
<description>
<![CDATA[
This is a ""description""
that I have formatted
]]>
</description>
</section>";
XPathDocument xDoc = new XPathDocument(new StringReader(xml.Trim()));
XPathNavigator nav = xDoc.CreateNavigator();
XPathNavigator descriptionNode =
nav.SelectSingleNode("/section/description");
string desiredValue =
Regex.Replace(descriptionNode.Value
.Replace(Environment.NewLine, String.Empty)
.Trim(),
@"\s+", " ");
Run Code Online (Sandbox Code Playgroud)
修剪节点值,用空替换换行符,用一个空格替换1+个空格.考虑到CDATA正在返回重要的空白,我认为没有任何其他方法可以做到这一点.
小智 9
其实我觉得很简单.该CDATA会在加载部分XmlDocument像另一个XmlNode不同的是,这个节点将要拥有财产的NodeType = CDATA,至极意思,如果你有XmlNode node = doc.SelectSingleNode("section/description");该节点将有一个ChildNode与InnerText属性充满了纯粹的数据,并有你想要删除刚刚使用的特殊字符Trim(),您将获得数据.
代码看起来像
XmlNode cDataNode = doc.SelectSingleNode("section/description").ChildNodes[0];
string finalData = cDataNode.InnerText.Trim();
Run Code Online (Sandbox Code Playgroud)
谢谢
XOnDaRocks
我认为最好的方法是......
XmlCDataSection cDataNode = (XmlCDataSection)(doc.SelectSingleNode("section/description").ChildNodes[0]);
string finalData = cDataNode.Data;
Run Code Online (Sandbox Code Playgroud)