C# 如何将字符串中的元素提取为xml并返回部分元素';s值

C# 如何将字符串中的元素提取为xml并返回部分元素';s值,c#,xml,C#,Xml,我计划根据日志文件中的消息提取id,id保持不变。例如:如果消息是“applicationstarted”,我应该将消息的id关联起来,并返回一个inenumerable列表 这是我的xml字符串: String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<log>\n" + " <entry id=\"1\">\

我计划根据日志文件中的消息提取id,id保持不变。例如:如果消息是“applicationstarted”,我应该将消息的id关联起来,并返回一个inenumerable列表

这是我的xml字符串:

String xml =
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<log>\n" +
            "    <entry id=\"1\">\n" +
            "        <message>Application started</message>\n" +
            "    </entry>\n" +
            "    <entry id=\"2\">\n" +
            "        <message>Application ended</message>\n" +
            "    </entry>\n" +
            "</log>";
我将GetIdsByMessage定义为:

public static IEnumerable<int> GetIdsByMessage(string xml, string message)
{
     // write to return id {2} for message="Application ended"
}
但我不知道如何收集所有ID并将其返回给来电者。有什么建议吗

以下是我的完整代码:

 public class LogParser
    {
    public static IEnumerable<int> GetIdsByMessage(string xml, string message)
    {
         // write to return id {2} for message="Application ended"
         XmlDocument xmltest = new XmlDocument();
         xmltest.LoadXml(xml);

         XmlNodeList elemlist = xmltest.GetElementsByTagName("message");
    }

    public static void Main(string[] args)
    {
        String xml =
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<log>\n" +
                "    <entry id=\"1\">\n" +
                "        <message>Application started</message>\n" +
                "    </entry>\n" +
                "    <entry id=\"2\">\n" +
                "        <message>Application ended</message>\n" +
                "    </entry>\n" +
                "</log>";

        foreach (int id in LogParser.GetIdsByMessage(xml, "Application ended"))
            Console.WriteLine(id);
    }
}
公共类日志解析器
{
公共静态IEnumerable GetIdsByMessage(字符串xml,字符串消息)
{
//写入以返回message=“Application ended”的id{2}
XmlDocument xmltest=新的XmlDocument();
LoadXml(xml);
XmlNodeList elemlist=xmltest.GetElementsByTagName(“消息”);
}
公共静态void Main(字符串[]args)
{
字符串xml=
“\n”+
“\n”+
“\n”+
“应用程序已启动\n”+
“\n”+
“\n”+
“应用程序已结束\n”+
“\n”+
"";
foreach(LogParser.GetIdsByMessage(xml,“应用程序已结束”)中的int-id)
控制台写入线(id);
}
}

谢谢

您可以轻松地使用Linq to XML:

public static IEnumerable<int> GetIdsByMessage(string xml, string message) =>
    XDocument
        .Parse(xml)
        .Root
        .Descendants("message")
        .Where(x => x.Value == message)
        .Select(x => (int)x.Parent.Attribute("id"));
公共静态IEnumerable GetIdsByMessage(字符串xml,字符串消息)=>
XDocument
.Parse(xml)
根
.后代(“信息”)
.Where(x=>x.Value==消息)
.Select(x=>(int)x.Parent.Attribute(“id”);

这是有效的:
XDocument.Parse(xml).Root.substands(“message”).Where(x=>x.Value==“Application end”).Select(x=>x.Parent.Attribute(“id”).Value)
@Enigmativity我想你可以把它作为一个答案吗?谢谢@Enigmativity,它解决了我的问题,需要学习很多关于xml和LinqToSql的知识。
 public class LogParser
    {
    public static IEnumerable<int> GetIdsByMessage(string xml, string message)
    {
         // write to return id {2} for message="Application ended"
         XmlDocument xmltest = new XmlDocument();
         xmltest.LoadXml(xml);

         XmlNodeList elemlist = xmltest.GetElementsByTagName("message");
    }

    public static void Main(string[] args)
    {
        String xml =
                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<log>\n" +
                "    <entry id=\"1\">\n" +
                "        <message>Application started</message>\n" +
                "    </entry>\n" +
                "    <entry id=\"2\">\n" +
                "        <message>Application ended</message>\n" +
                "    </entry>\n" +
                "</log>";

        foreach (int id in LogParser.GetIdsByMessage(xml, "Application ended"))
            Console.WriteLine(id);
    }
}
public static IEnumerable<int> GetIdsByMessage(string xml, string message) =>
    XDocument
        .Parse(xml)
        .Root
        .Descendants("message")
        .Where(x => x.Value == message)
        .Select(x => (int)x.Parent.Attribute("id"));