在文本C#中查找xml元素的索引

时间:2014-10-10 08:45:30

标签: c# xml wpf xpath

我正在制作一个在FlowDocument中显示XML的WPF应用程序,用户可以使用XPath选择此XML中的一个或多个元素。我希望能够突出显示XPath在FlowDocument中选择的元素的值。我目前正在考虑使用this method突出显示。问题是,由于FlowDocument显示一个字符串,我需要找到XPath在该字符串中表示的任何元素的索引 - 我不能只是将其作为文本搜索,因为它可能产生错误的匹配。有什么建议我怎么做?

1 个答案:

答案 0 :(得分:2)

如果您乐意使用LINQ to XML(它是一个通常更好的API),如果知道行中的行号和位置已经足够好了,您可以使用IXmlLineInfo

using System;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;

class Program
{
    static void Main(string[] args)
    {
        var xml = XDocument.Load("test.xml", LoadOptions.SetLineInfo);
        var xpath = "/root/child";
        var result = xml.XPathSelectElements(xpath);
        foreach (var element in result)
        {
            var info = (IXmlLineInfo) element;
            Console.WriteLine("{0}:{1} {2}",
                              info.LineNumber,
                              info.LinePosition,
                              element);
        }
    }
}

完全有可能你也可以将它与XmlElement一起使用,但我不确定如何。当然,这并没有给你角色定位 - 但除了其他任何东西之外,你可以轻松地自己合理地计算每一行开头的角色位置。当然,可能还有其他东西可以指定确切的角色位置 - 我只是没有看到它。