【问题标题】:find line number of specific tag of xml file [duplicate]查找xml文件的特定标签的行号[重复]
【发布时间】:2016-02-19 11:34:34
【问题描述】:

如何找到xml文件的特定标签的标签和行号, 例如:

<sec id="fm.s2">
<title>Acknowledgments</title>
</sec>
<p>Center for Evidence and Practice Improvement</p>
<p>Agency for Healthcare Research and Quality</p>
<sec id="fm.s2">
<title>Director</title>
</sec>
<p>Center for Evidence and Practice Improvement</p>
<p>Agency for Healthcare Research and Quality</p>
<sec id="fm.s2">
<title>Acknowledgments</title>
</sec>

在此示例中,我想获取 &lt;title&gt; 包含“致谢”文本的行号。

【问题讨论】:

  • 逐行读取文件并搜索需要的文本。
  • 是的,但我也想要该文本的行号
  • msdn.microsoft.com/en-US/library/… XmlTextReader 类具有 LineNumber 属性。也许你可以找到一种方法来使用这个类来获得你想要的东西。我链接的页面上给出的示例代码看起来已经很接近了。
  • 先生,我正在使用 xdocument,所以我想通过 xdocument 输出,所以请给我另一个解决方案
  • stackoverflow.com/questions/4471001/… 已经回答了这个问题。

标签: c# .net xml xml-parsing


【解决方案1】:

你可以用 linq 做到这一点

var xml = XDocument.Load(@"path", LoadOptions.SetLineInfo);

var lineNumbers = xml.Descendants()
            .Where(x =>!x.Descendants().Any() && //exact node contains the value
                        x.Value.Contains("Acknowledgments"))
            .Cast<IXmlLineInfo>()
            .Select(x => x.LineNumber);

【讨论】:

  • 您好,先生,我只想要 / 标记中的文本...从 <sec>/<title> 中查找文本
  • 不清楚你想要什么。行号还是文本?
  • 我想要文本,但是 标签中的文本(并且层次结构是 <sec>/<title>)我想要通过这个层次结构的文本
  • 您可以通过在 where 子句中添加适当的条件来做到这一点。
  • 或者这个:int? lineNumber = doc.Descendants().Select((x, i) => ((x.Name.LocalName == "title") && (x.Value == "Acknowledgments")) ? (int?)i : ( int?)null).Where(y => y != null).FirstOrDefault();
猜你喜欢
  • 2018-03-07
  • 2020-12-20
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
相关资源
最近更新 更多