Прочитать строку XML с пространствами имен для использования в XSL-преобразовании - PullRequest
1 голос
/ 23 сентября 2008

На веб-сайте ASP.NET 2.0 у меня есть строка, представляющая некоторый правильно сформированный XML. В настоящее время я создаю объект XmlDocument и запускаю XSL-преобразование для отображения в веб-форме. Все работало нормально, пока вход XML не стал содержать пространства имен.

Как я могу прочитать в этой строке и разрешить пространства имен?

Я включил текущий код ниже. Источник строки поступает из узла в кодировке HTML в RSS-канале WordPress.

XPathNavigator myNav= myPost.CreateNavigator();
XmlNamespaceManager myManager = new XmlNamespaceManager(myNav.NameTable);
myManager.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/");
string myPost = HttpUtility.HtmlDecode("<post>" +
    myNav.SelectSingleNode("//item[1]/content:encoded", myManager).InnerXml +
    "</post>");
XmlDocument myDocument = new XmlDocument();
myDocument.LoadXml(myPost.ToString());

Ошибка в последней строке:

"System.Xml.XmlException: 'w' является необъявленным пространством имен. Строка 12, позиция 201 в System.Xml.XmlTextReaderImpl.Throw (Exception e) ..."

Ответы [ 2 ]

1 голос
/ 23 сентября 2008

Ваш код выглядит правильно.

Возможно, проблема в документе xml, который вы пытаетесь загрузить. У него должны быть элементы с префиксом "w", но этот префикс не должен быть объявлен в документе XML

Например, вы должны иметь:

<test xmlns:w="http://...">
  <w:elementInWNamespace />
</test>

(в вашем документе, вероятно, отсутствует xmlns:w="http://")

0 голосов
/ 23 сентября 2008

Чувство инстинкта - одно из пространств имен, объявленных в // content: кодировка отбрасывается (вероятно, потому что вы используете буквальное свойство .InnerXml)

Как оценивается пространство имен w в myNav DOM? Вы захотите добавить xmlns: w = к вашему почтовому узлу. Вероятно, будут и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...