string sample1 = <SUCCESS><BUILDING>27</BUILDING></SUCCESS><CLEANED><LOCALITY>Value 1</LOCALITY></CLEANED>
string sample2 = <SUCCESS><BUILDING>14</BUILDING></SUCCESS> <SUCCESS><BUILDING>Value 2</BUILDING></SUCCESS>
在上面的两个字符串示例中,我想从右到左获得第一个“SUCCESS”标记。
因此,在样本1中,我想要返回= <SUCCESS><BUILDING>27</BUILDING></SUCCESS>
在样本2中我想要返回= <SUCCESS><BUILDING>Value 2</BUILDING></SUCCESS>
我知道我可以使用Index of to first occurrence但不确定最后一次
答案 0 :(得分:2)
XDocument doc = XDocument.Parse("<xml>" + sample2 + "</xml>");
Text = doc.Root.Elements("SUCCESS").Last().ToString();
答案 1 :(得分:1)
c#有一个很好的String函数,名为LastIndexOf(String)。它将以与indexOf(String)完全相同的方式工作,除了给出最后一次出现。
http://msdn.microsoft.com/en-us/library/1wdsy8fy(v=vs.110).aspx
希望这有帮助,
干杯
答案 2 :(得分:0)
如果您要解析XML,您可能会对使用XMLReader类感兴趣。阅读有关XMLReader here的更多信息。
请注意,您需要有效的XML才能使读者工作。在您的示例中,您需要将部分XML包装在唯一的根节点中(XML规范的一部分)。您可以考虑使用一些扩展方法来帮助您:
public static class XMLStringExtensions
{
public static string LastTag(this string innerXml, string tag)
{
string previousTag = null;
using (var reader = XmlReader.Create(new StringReader(innerXml.WrapInRoot())))
while(reader.ReadToFollowing(tag)) previousTag = reader.ReadOuterXml();
return previousTag;
}
public static string WrapInRoot(this string partialXml)
{
return string.Format("<root>{0}</root>", partialXml);
}
}
然后你可以像这样调用它:
sample1.LastTag("SUCCESS"); //<SUCCESS><BUILDING>27</BUILDING></SUCCESS>
sample2.LastTag("SUCCESS"); //<SUCCESS><BUILDING>Value 2</BUILDING></SUCCESS>