我有一个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)
答案 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);
}
但是请考虑该库有助于解析可用的XMLDocument或LinQ to XML的XML