C# 如何将字符串中的元素提取为xml并返回部分元素';s值
我计划根据日志文件中的消息提取id,id保持不变。例如:如果消息是“applicationstarted”,我应该将消息的id关联起来,并返回一个inenumerable列表 这是我的xml字符串: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\">\
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"));