2015-05-18 2 views
-1

У меня есть образец файла журнала, в котором у меня есть сообщение об ошибке плюс 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.GetElementsByTagName("Message"); 
    var resultNodes = new List<XmlNode>(); 
    foreach(XmlNode node in nodes) 
    { 
     if (node.Attributes != null && node.Attributes["Receiver"] != null && node.Attributes["Receiver"].Value == "+921215648545") 
     { 
      resultNodes.Add(node); 
     } 
    } 

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>[email protected]</Sender> 
     <Context> 
      <Parameter name="pswr" value="00"/> 
     </Context> 
       <Receiver>[email protected]</Receiver> 
     </Message> 
+1

Вы должны показать нам, как вы извлекаете этот xml-код и как его используете. Я предполагаю, что также было бы полезным реальное сообщение в журнале. –

+0

Я согласен, что на самом деле мы показываем, что XML, который вы разбираете, был бы жизненно важен. Вы пытаетесь проанализировать весь файл журнала как XML? Это может быть причиной, но, не видя реального контента, будет очень сложно диагностировать вашу проблему. –

+0

просмотреть отредактированный пост –

ответ

0

Вы, кажется, пытается загрузить весь файл журнала как XML:

XmlDocument xDoc = new XmlDocument(); 
xDoc.Load("C:\\Users\\qadeer.hussain\\Desktop\\gw-msg.log"); 

Это не сработает, потому что файл журнала не является XML-файлом - это текстовый файл, который просто содержит некоторый XML.

Вам необходимо проанализировать файл журнала и извлечь XML-файл, чтобы загрузить его с помощью XmlDocument. Существует множество способов разбора текстовых файлов без знания вашего проблемного домена. Я не буду вдаваться в подробности здесь. ,

+0

поблагодарить u, но может у вас предложить, пожалуйста, я много искал в Интернете, как конвертировать файл журнала в xml-файл, но я не смог найти –

+0

Это потому, что есть много разных способов сделать это - я не знаю формат ваши файлы журналов, поэтому предлагая что-либо здесь, просто будут дикими спекуляциями. –

1

Как уже упоминалось, файл не является 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; 
     } 
    } 
} 

Если вы можете изменить выходной формат файла журнала, я бы рекомендовал чтобы сделать синтаксический анализ намного проще, например, добавить строку до и после xml только с текстом [XML], тогда вы можете искать этот токен.

Редактировать: Обновить, чтобы использовать XmLDocument, а не XDocument.

+0

спасибо, как я могу читать данные из xdoc? –

+0

как я могу записать этот xdoc в другой XML-файл, чтобы я мог легко читать данные из него –

Смежные вопросы