Как получить содержимое XML без использования цикла while - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 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 кажется дорогостоящим, и если текстовый файл поврежден, это вызовет другие проблемы.

Заранее спасибо, Аниш

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Если вы хотите сделать это вручную, регулярное выражение может помочь вам

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 XMLDocument или LinQ to XML

0 голосов
/ 04 сентября 2018

Вы можете использовать XmlDocument класс, основанный на W3C DOM (объектная модель документа) и 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
0 голосов
/ 04 сентября 2018

Вы можете использовать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...