如何从XPath语句中找到字符串位置(索引)?

时间:2009-05-07 18:52:37

标签: xml vb.net

This question已接近,但它正在寻找序数位置。我正在寻找给定源字符串中的实际索引位置。

更好的解释:

我有以下字符串

"<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 :(得分:0)

这会给你你想要的吗?

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

不会从root用户那里给你索引,但它会从父节点给你索引。

答案 1 :(得分:0)

使用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);

如果你真的需要字符串中的字符索引,可以通过计算字符串中的换行符并添加列来推断出它。