如何在不使用while循环的情况下获取xml内容

时间:2018-09-04 08:07:57

标签: c# xml xml-parsing

我有一个xml文件,其中包含两个开始标记和结束标记。我需要分别在这两个标记中的内容。请检查以下内容。

<testing>
  <test>
  <text>test1</text>
  </test>
  <test>
  <text>test2</text>
  </test>   
</testing>

到目前为止,我正在使用while循环并查找标签的开始索引和结束索引,然后使用substring方法获取内容。请检查以下代码。

string xml = File.ReadAllText(@"C:\testing_doc.txt");
int startindex = xml.IndexOf("<test>");
while (startindex > 0)
{
  int endIndex = xml.IndexOf("</test>", startindex);
  int length = endIndex - startindex;
  string textValue = xml.Substring(startindex, length);
  startindex = xml.IndexOf("<test>", endIndex); // getting the start index for the second test tag
}

还有其他方法可以在不使用while循环的情况下获取内容吗?因为使用while似乎很昂贵,并且如果文本文件已损坏,则会导致其他问题。

预先感谢, 阿尼什(Anish)

3 个答案:

答案 0 :(得分:2)

您可以使用XPATH来解决以下查询XML的问题:

var xml = @"<testing>
  <test>
  <text>test1</text>
  </test>
  <test>
  <text>test2</text>
  </test>   
</testing>
";

var testing = XElement.Parse(xml);
var tests = testing.XPathEvaluate("test/text/text()") as IEnumerable;
foreach (var test in tests)
{
    Console.WriteLine(test); // test1, test2
}

答案 1 :(得分:0)

您可以使用基于W3C DOM(文档对象模型)的RankNTypes类  和XmlDocument类     XmlDocument doc =新的XmlDocument();

XPath

答案 2 :(得分:-1)

如果您想手动操作,正则表达式可以为您提供帮助

string xml = File.ReadAllText(@"C:\testing_doc.txt");
string pattern = "<test>(.*?)</test>";
Match match = Regex.Match(xml , pattern);
if (match.Success){
    System.Console.WriteLine(match.Groups[1].Value);
}

但是请考虑该库有助于解析可用的XMLDocumentLinQ to XML的XML