我正在制作一个在FlowDocument中显示XML的WPF应用程序,用户可以使用XPath选择此XML中的一个或多个元素。我希望能够突出显示XPath在FlowDocument中选择的元素的值。我目前正在考虑使用this method突出显示。问题是,由于FlowDocument显示一个字符串,我需要找到XPath在该字符串中表示的任何元素的索引 - 我不能只是将其作为文本搜索,因为它可能产生错误的匹配。有什么建议我怎么做?
答案 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
一起使用,但我不确定如何。当然,这并没有给你角色定位 - 但除了其他任何东西之外,你可以轻松地自己合理地计算每一行开头的角色位置。当然,可能还有其他东西可以指定确切的角色位置 - 我只是没有看到它。