我有一个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
您可以使用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
}
您可以使用基于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
如果您想手动执行,正则表达式可以帮助您
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