Можно ли получить оригинальный XML из XPathNavigator? - PullRequest
1 голос
/ 17 сентября 2009

У меня есть XML-документ, я хочу сделать подсветку синтаксиса.

Код использует XPathDocument , XPathNavigator и XPathNodeIterator . После того, как я позвоню Select () , как я могу получить исходный текст в документе XML?

var xpathDoc = new XPathDocument(new StringReader(this.richTextBox1.Text));
var nav = xpathDoc.CreateNavigator();
XmlNamespaceManager xmlns = new XmlNamespaceManager(nav.NameTable);
xmlns.AddNamespace("ns1", "urn:myxnlnamespace");
XPathNodeIterator selection = nav.Select(xpathExpression, xmlns);

foreach (XPathNavigator node in selection)
{
   // Here, node.OuterXml includes an explicit namespace.
   // If the original raw xml fragment for this node was
   //    <ElementName>Text</ElementName>
   // and if xmlns="urn:myxnlnamespace" is used on the root of the document....
   //
   // OuterXml will return
   //    <ElementName xmlns="urn:myxnlnamespace">Text</ElementName>
   //
   // InnerXml will return "Text" in this example. 
   // 
   // How can I get the original, raw XML bytestream for this node?
   // Like this:
   //    <ElementName>Text</ElementName>
   //
}

Для меня также будет работать получение IXmlLineInfo как начала, так и конца выбранного узла. Прямо сейчас я могу перейти к началу выбранного узла и получить для этого IXmlLineInfo. Но я знаю только, как перейти к следующему узлу (MoveToNext ()); Не знаю, как перейти к end текущего узла. Также этот подход не работает, если рассматриваемый узел является последним в последовательности (не больше братьев и сестер).

Это также сработало бы, если бы было какое-то выражение xpath, которое вернуло полный необработанный текст текущего узла. Пока что я тоже не могу найти что-то подобное.


РЕДАКТИРОВАТЬ : Я вышел за рамки этой проблемы с помощью бесстыдного взлома. Чтобы определить длину текста, который мне нужно выделить, я анализирую исходный текст xml вручную, ища угловые скобки и жетоны имен. Это не красиво, но при отсутствии чего-то лучшего, это работает для простых файлов XML.

Я все еще заинтересован в реальном ответе, если у кого-то есть такой.

1 Ответ

0 голосов
/ 18 сентября 2009

Может оказаться полезным, как XPath Visualizer выполняет синтаксическую подсветку XML-документа.

...