C# 如何从日志文件中获取Xml标记
我有一个日志文件示例,其中有一条错误消息和xml标记,例如C# 如何从日志文件中获取Xml标记,c#,xml,C#,Xml,我有一个日志文件示例,其中有一条错误消息和xml标记,例如 error message xmltag error message xml tag 问题是我只想获取xml标记,但得到的错误是“根级别的数据无效” c#代码为 XmlDocument xDoc=new XmlDocument(); xDoc.Load(“C:\\Users\\qadeer.hussain\\Desktop\\gw msg.log”); var nodes=xDoc.GetElementsByT
error message
xmltag
error message
xml tag
问题是我只想获取xml标记,但得到的错误是“根级别的数据无效”
c#代码为
XmlDocument xDoc=new XmlDocument();
xDoc.Load(“C:\\Users\\qadeer.hussain\\Desktop\\gw msg.log”);
var nodes=xDoc.GetElementsByTagName(“消息”);
var resultNodes=新列表();
foreach(节点中的XmlNode节点)
{
if(node.Attributes!=null&&node.Attributes[“Receiver”]!=null&&node.Attributes[“Receiver”]。Value=“+921215648545”)
{
添加(节点);
}
}
xml文件是
some value
some value
<Message type="email">
<Details locale="en">
<Part type="plain" id="email/plain/User.ResetPassword.email"/>
</Details>
<Subject>New Password</Subject>
<Sender>BB.Ops@example.com</Sender>
<Context>
<Parameter name="pswr" value="00"/>
<Receiver>a.k@example.com</Receiver>
一些值
一些价值
新密码
BB。Ops@example.com
A.k@example.com
一些值
一些价值
新密码
BB。Ops@example.com
A.k@example.com
您似乎试图将整个日志文件作为XML加载:
XmlDocument xDoc = new XmlDocument();
xDoc.Load("C:\\Users\\qadeer.hussain\\Desktop\\gw-msg.log");
这是行不通的,因为日志文件不是XML文件——它是一个恰好包含一些XML的文本文件
您需要解析日志文件并提取XML,以便使用
XmlDocument
加载它-解析文本文件的方法有很多,如果不了解您的问题域,我将不在这里详细介绍这些细节。如前所述,该文件不是XML。您需要阅读每一行并确定它是xml的一部分还是消息的一部分。由于xml不在一行上,而且消息可以是任意长度的,这可能有点偶然
一种可能的解决方案(仅适用于您提供的示例)如下:
var filename = "...";
var xmlText = new StringBuilder();
bool isXml = false;
foreach (var line in System.IO.File.ReadLines(filename))
{
if (line.Trim().StartsWith("<Message"))
isXml = true;
if (isXml)
{
xmlText.Append(line);
if (line.Trim().EndsWith("</Message>"))
{
//var xdoc = XDocument.Parse(xmlText.ToString());
var xdoc = new XmlDocument();
xml.LoadXml(xmlText.ToString());
//process xml here
xmlText.Clear();
isXml = false;
}
}
}
var filename=“…”;
var xmlText=新的StringBuilder();
bool-isXml=false;
foreach(System.IO.File.ReadLines(文件名)中的var行)
{
if(line.Trim().StartsWith("您应该向我们展示如何检索此xml代码以及如何使用它。我想,一条真实的日志消息也会有所帮助。我同意,向我们展示您正在解析的xml非常重要。您是否试图将整个日志文件解析为xml?这可能是原因,但如果看不到真实内容,则很难进行诊断解决您的问题。有些行由消息组成,有些是标记。您是在尝试将整个日志文件解析为XML吗?还是在读取XML文本然后尝试解析它?XmlDocument xDoc=new XmlDocument();xDoc.Load(“C:\\Users\\qadeer.hussain\\Desktop\\gw msg.log”);var nodes=xDoc.GetElementsByTagName(“消息”);var resultNodes=new List();foreach(节点中的XmlNode节点){if(node.Attributes!=null&&node.Attributes[“Receiver”]!=null&&node.Attributes[“Receiver”]。Value==“+921215648545”){resultNodes.Add(node);}谢谢你,但是你能建议我吗?我在互联网上搜索了很多如何将日志文件转换成xml文件,但我找不到,因为有很多不同的方法,我不知道你的日志文件的格式,所以这里的任何建议都只是猜测。我如何将这个xdoc写入另一个xml文件以便我可以从中轻松读取数据
XmlDocument xDoc = new XmlDocument();
xDoc.Load("C:\\Users\\qadeer.hussain\\Desktop\\gw-msg.log");
var filename = "...";
var xmlText = new StringBuilder();
bool isXml = false;
foreach (var line in System.IO.File.ReadLines(filename))
{
if (line.Trim().StartsWith("<Message"))
isXml = true;
if (isXml)
{
xmlText.Append(line);
if (line.Trim().EndsWith("</Message>"))
{
//var xdoc = XDocument.Parse(xmlText.ToString());
var xdoc = new XmlDocument();
xml.LoadXml(xmlText.ToString());
//process xml here
xmlText.Clear();
isXml = false;
}
}
}