代码之家  ›  专栏  ›  技术社区  ›  Joshua Hayworth

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

  •  0
  • Joshua Hayworth  · 技术社区  · 15 年前

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

    更好的解释:

    我有下面的线

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

    我在装那个 一串 到.NET XML文档对象中。运费和线路费可能是其中的一个因素。

    Dim xmlSearchText As New XmlDocument()
    xmlSearchText.LoadXml(SearchTextBox.Text)
    
    Dim selectedNode As XmlNode = xmlSearchText.SelectSingleNode(txtSearch.Text)
    

    以下xpath语句可用于查找第三个节点:

    a/b[.='tsr']
    

    但是,我需要它返回一个字符串索引23,而不是序号位置3。

    可能吗?不可能?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Crispy    15 年前

    这能给你想要的吗?

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

    不会从根节点向您提供索引,但会从父节点向您提供索引。

        2
  •  0
  •   Coincoin    15 年前

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

    如果您确实需要字符串中的字符索引,可以通过计算字符串中的换行数并添加列来推导它。