Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何直接读取xml文件以获取XElement值?_C#_.net_Xmlreader_Xelement - Fatal编程技术网

C# 如何直接读取xml文件以获取XElement值?

C# 如何直接读取xml文件以获取XElement值?,c#,.net,xmlreader,xelement,C#,.net,Xmlreader,Xelement,现在我正在使用: XElement xe = XElement.ReadFrom 它需要一个XmlReader: XmlReader reader = XmlTextReader.Create new StringReader 这需要一个字符串,这需要我传递一个StringReader: XmlReader reader = XmlTextReader.Create new StringReader 这需要文本阅读器/StreamReader才能最终将文件路径传递给它: TextRea

现在我正在使用:

XElement xe = XElement.ReadFrom
它需要一个
XmlReader

XmlReader reader = XmlTextReader.Create
new StringReader
这需要一个字符串,这需要我传递一个
StringReader

XmlReader reader = XmlTextReader.Create
new StringReader
这需要
文本阅读器/StreamReader
才能最终将文件路径传递给它:

TextReader textReader = new StreamReader ( file );
最简单的方法是什么?我已经有了使用
XElement
的代码,因此它可以正常工作,但我想减少从xml文件中获取
XElement
的步骤。比如:

XElement xe = XElement.ReadFrom (string file);
有什么想法吗?

琼,使用:

XDocument文件= Load(“PurchaseOrder.xml”)

一些评论:

  • 您不应该使用
    XmlTextReader.Create
    。使用
    XmlReader.Create
    。它是一个静态方法,所以使用哪个派生类来引用它并没有什么区别。使用
    XmlTextReader.Create
    ,会产生误导,因为它看起来与
    XmlReader.Create
    不同。不是
  • XmlReader.Create
    具有接受字符串的重载,就像
    XDocument.Load
    所做的那样:
  • 实际上没有所谓的
    XElement.ReadFrom
    。实际上是

  • 但是显式管理文件流对象和XmlReader对象更好-你知道流何时关闭…

    谢谢John,但是如果我这样做,我还能做xe.Elements(“something”).Elements(“else”).Select等等吗?Joan,是的。没有所谓的
    XElement.Elements
    。是的。我强烈建议您开始注意在中定义了哪些类。很多都是继承的。谢谢John,那么静态方法会被带到所有派生类型中吗?您还说过XmlReader.Create接受字符串,但这不是文件路径(读取文件内容),对吗?最后,我现在看到XElement.ReadFrom是XNode.ReadFrom,但在这种情况下,它在XElement下是如何显示的?相同的继承协议?@Joan:是的,静态总是被继承的(假设它们不是私有的)。接受字符串的
    XmlReader.Create
    重载将其视为URI,但“filename.typ”被视为文件路径。是的,同样的继承协议。@琼:没关系
    XDocument.Load(string)
    几乎肯定会使用(XmlReader=XmlReader.Create(string))调用
    {return XDocument.Load(reader);}
    。换句话说,一切最终都归结为一个
    XmlReader
    。因此,如果你这样做,读卡器和流对象将泄漏内存?琼:不,它们不会泄漏资源(在任何情况下都不会泄漏内存)-只是在垃圾收集器最终找到资源之前,资源不会被清理。如果您关心释放资源,作为一个好的程序员,您可以将代码包装在using语句中,因为XmlReader实现IDisposable:
    使用(var reader=XmlReader.Create(“SomeFile.xml”)){var element=XElement.ReadFrom(reader);}