Joh*_*dol 13 c# xml xmlreader .net-2.0
我正在解析大量的大文件,在分析我的瓶颈后:
XmlDocument doc = new XmlDocument();
doc.Load(filename);
Run Code Online (Sandbox Code Playgroud)
这种方法非常方便,因为我可以像这样提取节点:
XmlNodeList nodeList = doc.SelectNodes("myXPath");
Run Code Online (Sandbox Code Playgroud)
我正在切换到XmlReader,但当我找到我需要提取的元素时,我不知道如何从它构建一个XmlNode,因为不太熟悉XmlReader:
XmlReader xmlReader = XmlReader.Create(fileName);
while (xmlReader.Read())
{
//keep reading until we see my element
if (xmlReader.Name.Equals("myElementName") && (xmlReader.NodeType == XmlNodeType.Element))
{
// How do I get the Xml element from the reader here?
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够构建一个List<XmlNode>对象.我在.NET 2.0上.
任何帮助赞赏!
exe*_*tor 13
为什么不做以下事情呢?
XmlDocument doc = new XmlDocument();
XmlNode node = doc.ReadNode(reader);
Run Code Online (Sandbox Code Playgroud)
该XmlNode类型没有公共构造函数,因此您无法自己创建它们.你需要有一个XmlDocument可以用来创建它们的东西:
XmlDocument doc = new XmlDocument();
while (xmlReader.Read())
{
//keep reading until we see my element
if (xmlReader.Name.Equals("myElementName") && (xmlReader.NodeType == XmlNodeType.Element))
{
// How do I get the Xml element from the reader here?
XmlNode myNode = doc.CreateNode(XmlNodeType.Element, xmlReader.Name, "");
nodeList.Add(myNode);
}
}
Run Code Online (Sandbox Code Playgroud)
XmlReader并XmlDocument有一个非常独特的处理方式.XmlReader在内存中保留任何内容并使用仅向前的方法,而不是在内存中构建完整的DOM树XmlDocument.当性能成为一个问题时它很有用,但它也要求你以不同的方式编写应用程序:而不是使用XmlNode,你不保留任何东西,只处理"在旅途中":即当一个元素经过你需要的时候,你做点什么 这接近SAX方法,但没有回调模型.
"如何获取XmlElement"的答案是:您必须根据读者的信息从头开始构建它们.不幸的是,这违背了性能提升.除非有少数不同的情况,否则一旦切换到XmlReader,通常最好完全阻止使用DOM方法.
此外,使用XPath提取节点的"非常方便"的方法(SelectNodes如上所示)不能在这里使用:XPath需要一个DOM树.将此方法视为一种过滤方法:您可以向XmlReader添加过滤器,并告诉它跳过某些节点或读取直到某个节点.这非常快,但是思维方式不同.
| 归档时间: |
|
| 查看次数: |
23947 次 |
| 最近记录: |