Обработка строки Linq XML - PullRequest
0 голосов
/ 24 мая 2011

Мне нужно проанализировать строку XML с помощью Linq, и я придумал следующий код:

using System;
using System.Linq;
using System.Xml.Linq;

class LinqXml 
{
    public void Parse(string input)
    {
    XDocument xdoc = XDocument.Load(input);
    var lang = from d in xdoc.Elements("PipeUnit").Elements("Step").Elements("Pipelist").Elements("NamedPipe").Elements("NameOfPipe") select d;

    Console.WriteLine(lang.First().Value);

    foreach (var item in lang) 
    {
        Console.WriteLine(item.Value);
    }
    }

    static void Main()
    {

        string tempString = @"
<PipeUnit>
  <Step>
    <Pipelist>
      <NamedPipe>
        <NameOfPipe>Name</NameOfPipe>
        <PipeData>Data</PipeData>
      </NamedPipe>
    </Pipelist>
  </Step>
</PipeUnit>        
        ";
        var linqXml = new LinqXml();
        linqXml.Parse(tempString);
    }
}

При компиляции этого кода с помощью Mono - dmcs linqxml.cs /r:System.Xml.Linq.dll и попытке запустить, я получил следующееошибки.

Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path "/Users/smcho/Desktop/csharp/
<PipeUnit>
  <Step>
    <Pipelist>
      <NamedPipe>
        <NameOfPipe>Name</NameOfPipe>
        <PipeData>Data</PipeData>
      </NamedPipe>
    </Pipelist>
  </Step>
<PipeUnit>".
  at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in <filename unknown>:0 
  at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)
  at System.Xml.XmlUrlResolver.GetEntity (System.Uri absoluteUri, System.String role, System.Type ofObjectToReturn) [0x00000] in <filename unknown>:0 
  at Mono.Xml2.XmlTextReader.GetStreamFromUrl (System.String url, System.String& absoluteUriString) [0x00000] in <filename unknown>:0 
  at Mono.Xml2.XmlTextReader..ctor (Boolean dummy, System.Xml.XmlResolver resolver, System.String url, XmlNodeType fragType, System.Xml.XmlParserContext context) [0x00000] in <filename unknown>:0 
  at System.Xml.XmlTextReader..ctor (Boolean dummy, System.Xml.XmlResolver resolver, System.String url, XmlNodeType fragType, System.Xml.XmlParserContext context) [0x00000] in <filename unknown>:0 
  at System.Xml.XmlReader.Create (System.String url, System.Xml.XmlReaderSettings settings, System.Xml.XmlParserContext context) [0x00000] in <filename unknown>:0 
  at System.Xml.XmlReader.Create (System.String url, System.Xml.XmlReaderSettings settings) [0x00000] in <filename unknown>:0 
  at System.Xml.Linq.XDocument.Load (System.String uri, LoadOptions options) [0x00000] in <filename unknown>:0 
  at System.Xml.Linq.XDocument.Load (System.String uri) [0x00000] in <filename unknown>:0 
  at LinqXml.Parse (System.String input) [0x00000] in <filename unknown>:0 
  at LinqXml.Main () [0x00000] in <filename unknown>:0

Что может быть не так?

Ответы [ 3 ]

5 голосов
/ 24 мая 2011

Замените это:

  XDocument xdoc = XDocument.Load(input);

на:

  XDocument xdoc = XDocument.Parse(input);

вы передаете XML, а не имя файла.

2 голосов
/ 24 мая 2011

в вашем методе Parse, вы хотите

XDocument.Parse(input)
1 голос
/ 24 мая 2011

Заменить

XDocument xdoc = XDocument.Load(input);

на

XDocument xdoc = XDocument.Parse(input);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...