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);}