XmlReader.Skip - 需要读取跳过的结尾元素?
如果我跳过,是否还需要读取结束元素?XmlReader.Skip - 需要读取跳过的结尾元素?
reader.ReadStartElement("ENCODING");
reader.Skip();
reader.ReadEndElement();
而我不明白我们什么时候需要ReadEndElement。例如,我们在一些课堂上已经得到了,完全没有使用它。例如:
using (reader)
{
reader.Read();
reader.ReadStartElement("Envelope");
reader.ReadStartElement("Body");
reader.ReadStartElement("RESULT");
reader.ReadStartElement("SUCCESS");
_success = reader.ReadString();
if (!Success)
{
if (SomeUtil.ReadUntilElement(reader, "FaultString"))
{
string _errorMessage = reader.ReadString();
InvalidOperationException ex = new InvalidOperationException(_errorMessage);
throw ex;
}
else
throw new InvalidOperationException("Invalid Error Message");
}
}
您需要将调用ReadStartElement的次数与调用ReadEndElement的次数相匹配。当你处于最后一个元素时,它可能在某些情况下起作用,但通常不推荐。
你可以粗略地执行以下操作跳过当前元素:
int depth = reader.Depth;
while (!reader.EOF && (reader.Depth > depth || reader.NodeType == XmlNodeType.EndElement))
reader.Read();
通过捕捉和比较的读者,我们可以肯定,我们发现当前元素的匹配密切的深度。
这是个好主意。然而,我不确定代码是否正确,因为如果您尝试跳过的元素的EndElement后面跟着更多的结束元素,那么这也会跳过所有这些元素。 因此,对于对称性,我所做的是在开始解析可能存在问题的子树之前,我记录了初始深度。然后我尝试着解决。如果发生异常,我在执行 while(!reader.EOF && reader.Depth> currentNodeDepth) { reader.Read(); } – 2011-05-19 09:40:16
它可以在不读取它的情况下将所有内容带到最后的元素。然后,作为一个完整性检查,我在调用reader.ReadEndElement之前检查reader.Name是我期望的元素。 – 2011-05-19 09:45:01
我的老板说我们根本不需要它们!它的工作原理!我开始配合他们,然后他说我们不需要所有的人。跆拳道。所以这就是为什么我问,因为我不明白为什么它没有他们会工作,但它确实如此。 – PositiveGuy 2009-09-14 19:34:13