.NET:从 XPath 中定位原始 XML 文档中的节点

问题描述 投票:0回答:1

我正在尝试以编程方式定位由 XPath 标识的 XML 文本中的元素。也就是说,不仅要在解析的 XML 结构中查找引用的元素,还要确定原始 XML 文档中的开始和结束字符位置。

有关我试图解决的问题的更多信息:我维护一个将 XML 发送到 Web 服务的 C# 程序。如果 Web 服务报告错误(在数据级别,而不是在 XML 语法中),则错误响应将包含错误位置作为 XPath。我想做的是找到已识别的元素,以便在 UI 中突出显示它。

我发现了 XPathNavigator 和 XmlNode.SelectSingleNode,但它们似乎只对解析的 XML 结构进行操作。如果有办法将它们映射回原始 XML 中的行/字符位置,我看不到它。

有人可以帮忙吗?

精简示例:

<?xml version="1.0" encoding="utf-8"?>
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3" ODMVersion="1.3" FileType="Transactional">
  <ClinicalData StudyOID="xxx" MetaDataVersionOID="1">
    <SubjectData SubjectKey="yyy" TransactionType="Insert">
      <SiteRef LocationOID="zzz" />
    </SubjectData>
  </ClinicalData>
</ODM>

错误响应中的 XPath 如下所示:

/ODM/ClinicalData[1]/SubjectData[1]
c# .net xml xpath
1个回答
0
投票

XDocument
允许使用某些选项进行解析以公开
IXmlLineInfo
:

var linqXmlDoc = XDocument.Load("sample1.xml", LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo);

var linqNode = linqXmlDoc.XPathSelectElement(xpath);

if (linqNode is IXmlLineInfo linqLineInfo)
{
    Console.WriteLine("XNode.LineNumber {0}", linqLineInfo.LineNumber);
}
© www.soinside.com 2019 - 2024. All rights reserved.