我如何使xmldataprovider处理转义字符
本文关键字:处理 转义字符 xmldataprovider 何使 | 更新日期: 2023-09-27 18:08:59
我在WPF中构建了一个非常简单的XAML RSS阅读器,使用XMLDataProvider获取RSS数据。XAML看起来像这样:
<XmlDataProvider x:Key="rssData" XPath="//item" Source="http://www.theglobeandmail.com/?service=rss" IsAsynchronous="True" IsInitialLoadEnabled="True" />
然后,我像这样在listtitemtemplate中显示RSS提要提供的描述(不相关的详细信息省略):
<TextBlock TextWrapping="Wrap" Text="{Binding XPath=description}"/>
问题是描述中的任何转义字符都是未经处理的。例如:公开信谴责市长的计划等。
, 146;当然,应该转换成撇号。我可以编写一个绑定转换器来相当容易地做到这一点,但我认为我不应该这样做。我错过了什么简单的东西?
提前感谢您的帮助。
我仍然希望有一个更好的方法,但现在我实现了一个值转换器,使用HTML解码器,然后手动修复字符&145;通过,149;。不过,我愿意接受更好的解决方案!
public class HTMLEscapedCharactersConverter : IValueConverter
{
private static readonly char[] MapChars = {''x091', ''x092', ''x093', ''x094'};
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var htmlText = value as string;
if (!string.IsNullOrEmpty(htmlText))
{
htmlText = System.Net.WebUtility.HtmlDecode(htmlText);
if (htmlText.IndexOfAny(MapChars) > 0)
{
var decodedText = new StringBuilder(htmlText.Length);
foreach (var ch in htmlText)
switch (ch)
{
// Windows Code page 1252: http://en.wikipedia.org/wiki/Windows-1252
case ''x091':
decodedText.Append(''x2018');
break;
case ''x092':
decodedText.Append(''x2019');
break;
case ''x093':
decodedText.Append(''x201C');
break;
case ''x094':
decodedText.Append(''x201D');
break;
default:
decodedText.Append(ch);
break;
}
return decodedText.ToString();
}
}
return htmlText ?? String.Empty;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = value as string;
if (s != null)
{
s = WebUtility.HtmlEncode(s);
}
return s ?? String.Empty;
}
}