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

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

我有一个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

c# xml xml-parsing
3个回答
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
}

0
投票

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

doc.load(@"C:\testing_doc.txt");

XmlNodeList values = doc.SelectNodes("testing/test/text");  //Using XPath

string str = string.Empty;

    foreach (XmlNode x in values)
    {
        str += x.InnerText + ",";
    }

str.TrimEnd(',');

Console.WriteLine(str);   //test1,test2

-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);
}

但想想有助于解析XML的库XMLDocumentLinQ to XML

© www.soinside.com 2019 - 2024. All rights reserved.