c# - 如何从字符串中提取元素作为 xml 并返回元素值的一部分
问题描述
我计划根据消息提取 id,id 保存在日志文件中。例如:如果消息是“应用程序已启动”,我应该关联消息的 id 并返回一个无法计数的列表。
这是我的 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 来读取字符串:
foreach (int id in LogParser.GetIdsByMessage(xml, "Application ended"))
Console.WriteLine(id);
我将我的 GetIdsByMessage 定义为:
public static IEnumerable<int> GetIdsByMessage(string xml, string message)
{
// write to return id {2} for message="Application ended"
}
我尝试将字符串解析为 xml,如下所示:
XmlDocument xmltest = new XmlDocument();
xmltest.LoadXml(xml);
XmlNodeList elemlist = xmltest.GetElementsByTagName("message");
但我不知道如何收集所有的 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);
}
}
谢谢
解决方案
您可以轻松地使用 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"));
推荐阅读
- linux - 使用awk解析转换如下日志
- kubernetes - GKE 中的私有集群如何对同一子网中的 GCP 计算实例 (VM) 进行身份验证?
- wordpress - Wordpress 中的联系表格 7 - 如何隐藏电子邮件中的空白字段?
- reactjs - 无法让 npm 运行启动 testcafe 的脚本
- lua - 为什么这段代码意味着所有表共享一个元表
- javascript - jQuery 在单击下一步时显示和隐藏表单
- azure - 将 DataFactory 连接到 Lotus notes DB
- powerbi - Power BI - 应用筛选器时,度量随机返回空白
- javascript - 参数值未在 JavaScript 中传递
- node.js - 如何将流通过管道传输到节点中的文件描述符?