Проблема кодирования привязки данных меню ASP.Net
-
24-09-2019 - |
Вопрос
У меня есть меню, в котором я привязываю данные через:
XmlDataSource xmlData = new XmlDataSource();
xmlData.DataFile = String.Format(@"{0}{1}\Navigation.xml", getXmlPath(), getLanguage());
xmlData.XPath = @"/Items/Item";
TopNavigation.DataSource = xmlData;
TopNavigation.DataBind();
Проблема в том, что в моем xml есть специальные символы, поскольку я использую много французских слов.
В качестве альтернативы я попробовал вместо этого использовать поток и использовать кодировку для получения специальных символов с помощью следующего кода:
StreamReader strm = new StreamReader(String.Format(@"{0}{1}\Navigation.xml", getXmlPath(), getLanguage()), Encoding.GetEncoding(1254));
XmlDocument xDoc = new XmlDocument();
xDoc.Load(strm);
XmlDataSource xmlData = new XmlDataSource();
xmlData.ID = "TopNav";
xmlData.Data = xDoc.InnerXml;
xmlData.XPath = @"/Items/Item";
TopNavigation.Items.Clear();
TopNavigation.DataSource = xmlData;
TopNavigation.DataBind();
Проблема, с которой я столкнулся сейчас, заключается в том, что мои данные не обновляются, когда я меняю путь чтения потока.
Когда я пропускаю код, это происходит, но не на моей странице.
Итак, вопрос в том, как мне обновить данные?Или (что на самом деле предпочтительнее), как мне получить кодировку прямо в первом фрагменте кода?
Помощь высоко ценится!
РЕДАКТИРОВАТЬ:
Я попробовал решение CDATA, однако я работаю с атрибутами, поэтому невозможно указать элемент в атрибуте, мой xml:
<?xml version="1.0" encoding="utf-8" ?>
<Items Text="">
<Item Text="Actualités>"/>
<Item Text="Matériau">
<Item Text="Arsenal"/>
<Item Text="Vêtements"/>
</Item>
<Item Text="Links"/>
</Items>
Есть еще идеи?
Решение 2
Я решил свою проблему.
Я изменил кодировку моего XML-файла в Notepad++ на UTF8 вместо ANSI (по умолчанию), и это решило проблему.
В любом случае спасибо за ответы
Другие советы
Попробуйте обернуть французские слова тегом <![CDATA[....]]>.
В этом случае XML не будет анализировать ваши специальные символы.