У меня есть 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.
Я все еще заинтересован в реальном ответе, если у кого-то есть такой.