从右到左查找字符串中的标签

时间:2014-01-16 16:19:11

标签: c#

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但不确定最后一次

3 个答案:

答案 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>
相关问题