如何使用c#在xml文件的文本中查找包含@,<,>,&,*,$,#等特殊字符的标记和行号

时间:2016-02-18 09:33:22

标签: c# xml

我有一个xml文件,内容如下,

<Root>
   <Test> EffectiveHealthCare@ahrq.hhs.gov </Test>
</Root>
<Parent>
   <Test> Welcome</Test>
</Parent>

在包含特殊字符时,您知道如何在文件中获取标记和行号吗?

我的输出看起来像

标记< Test>EffectiveHealthCare@ahrq.hhs.gov</Test>

行号:2

文字EffectiveHealthCare@ahrq.hhs.gov

enter image description here

Image2 for http://stackoverflow.com/questions/4471001/get-line-number-for-xelement-here

请帮帮我。

谢谢,

Sheena Roy

2 个答案:

答案 0 :(得分:0)

如果你只想要行号,你可以写:

var specialChars = new [] {'@','<','>','&','*','$','#'};
var linesWithSpecialChars = new List<int>();
var i = 0;
foreach(var line in File.ReadLines(<yourfilename>))
{
   if(line.indexOfAny(specialChars) > -1)
   {
        linesWithSpecialChars.Add(i);
   }
   i++;
}

答案 1 :(得分:0)

例如(如果文档是字符串):

XDocument.Load(new StringReader(@"
<xml>
<Root>
   <Test> AnotherLine </Test>
   <Test> EffectiveHealthCare@ahrq.hhs.gov </Test>
</Root>
<Parent>
   <Test> Welcome</Test>
</Parent>
</xml>"), LoadOptions.SetLineInfo)
.Root
.Elements("Root")
.Elements("Test")
.Where(node => node.Value.IndexOfAny(new [] {'@','<','>','&','*','$','#'}) > -1 )
.Select(node => (node as IXmlLineInfo).LineNumber)

加载文档时需要设置LoadOptions.SetLineInfo输入参数

用于查找任何元素(即叶节点)中的字符:

XDocument.Load(new StringReader(@"
<xml>
<Root>
   <Test> AnotherLine </Test>
   <Test> EffectiveHealthCare@ahrq.hhs.gov </Test>
</Root>
<Parent>
   <Test> Welcome</Test>
</Parent>
</xml>"), LoadOptions.SetLineInfo)
.Root
.Descendants()
.Where(node => !node.HasElements)
.Where(node => node.Value.IndexOfAny(new [] {'@','<','>','&','*','$','#'}) > -1 )
.Select(node => (node as IXmlLineInfo).LineNumber)