Как я могу найти позицию строки (индекс) в операторе XPath? - PullRequest
0 голосов
/ 07 мая 2009

Этот вопрос близок, но он ищет порядковый номер. Я ищу фактическую позицию индекса в заданной исходной строке.

Лучше Объяснение:

У меня есть следующая строка

"<a>
    <b>zyx</b>
    <b>wvu</b>
    <b>tsr</b>
    <b>qpo</b>
</a>"

Я загружаю эту строку в объект .NET XmlDocument. Возврат каретки и плата за линию могут быть здесь фактором.

Dim xmlSearchText As New XmlDocument()
xmlSearchText.LoadXml(SearchTextBox.Text)

Dim selectedNode As XmlNode = xmlSearchText.SelectSingleNode(txtSearch.Text)

Следующая инструкция XPath может использоваться для поиска 3-го узла:

a/b[.='tsr']

Однако мне нужно, чтобы он возвращал строковый индекс 23, а не порядковый номер 3.

возможно? Не возможно?

Ответы [ 2 ]

0 голосов
/ 08 мая 2009

Использование XPathDocument вместо XmlDocument позволит вам получить доступ к интерфейсу IXmlLineInfo с номером строки и положением столбца.

XPathDocument document = new XPathDocument("file.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathNavigator node = navigator.Select("a/b[.='tsr']");
IXmlLineInfo info = ((IXmlLineInfo)node);
Console.WriteLine("Found at ({0},{1})",info.LineNumber,info.LinePosition);

Если вам действительно нужен индекс символа из строки, вы можете вывести его, посчитав в строке новые строки и добавив столбец.

0 голосов
/ 07 мая 2009

Это дает вам то, что вы хотите?

selectedNodenode = xmlSearchText.SelectSingleNode("a/b[.='tsr']");
selectedNode.ParentNode.OuterXml.IndexOf(selectedNode.OuterXml)

Не даст вам индекс из корня, но он даст вам индекс из родительского узла.

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