我有以下XML
<?xml version="1.0"?>
<DisplayViewHtml>
<embeddedHTML><![CDATA[<html><body><div>Hello World</div></body></html>]]></embeddedHTML>
<executive>Madan Mishra</executive>
<imgSRC>/executive/2.jpg</imgSRC>
</DisplayViewHtml>
在尝试使用CDATA提取embeddedHTML
的值的c#代码中。
我的c#代码如下,
XElement displayViewHtml=null;
XmlReader reader = XmlReader.Create(new StringReader(e.Result));
displayViewHtml = XElement.Load(reader);
IEnumerable<XElement> settings = from item in displayViewHtml.Elements() select item;
foreach (XElement setting in settings)
{
switch (setting.Name.ToString())
{
case "embeddedHTML":
counterViewHtml = setting.Value;
break;
case "executive":
executive = setting.Value;
break;
case "imgSRC":
imgSRC = setting.Value;
break;
default:
//log
break;
}
}
从上面的代码中我可以提取embeddedHTML
,executive
和imgSRC
的值,但embeddedHTML
给出了
<![CDATA[<html><body><div>Hello World</div></body></html>]]>
但我想要
<html><body><div>Hello World</div></body></html>
请不要建议使用.Replace
方法
答案 0 :(得分:2)
正如@CamBruce建议的那样,问题是你的xml文件编码了不应该编码的字符。理想的解决方案是修复生成xml文件的程序。无论如何,如果您出于某种原因希望在这里进行解决方案,这种方式将会:
.....
case "embeddedHTML":
var element = XElement.Parse("<embeddedHtml>" +
setting.Value +
"</embeddedHtml>");
counterViewHtml = element.Value;
break;
.....
上面的代码告诉程序通过解析已经未转义的字符串来创建新的XElement(变量element
)。因此,新创建的XElement的值将包含您想要的字符串:
<html><body><div>Hello World</div></body></html>
答案 1 :(得分:0)
看起来XML中的CData声明是用HTML的其余部分编码的。确保此XML的生产者具有非编码的CData声明,如<![CDATA[ encoded HTML content ]]>
否则,您拥有的代码看起来是正确的。使用Linq to XML读取CData需要做什么特别的事情。