2010-12-23 170 views
0

我正在解析一个Xml文件。我在C#2.0中如何使用更合理的XPathNodeIteratorMoveNext()遇到了麻烦。关于C#中XPathNodeIterator问题的问题#

我的代码,因为这,

while (it.MoveNext()) 
{ 


string str = it.Current.GetAttribute("id", it.Current.NamespaceURI); 

it.Current.MoveToChild("item", ""); 

// do someting.... 
// My XMl file is a complex Xml file. I must Move to multi layer Child with *MoveToChild()*. 
// After that, I must add several *MoveToParent()* in different Layers to make sure the *it* still meet for the use of while loop. 
// I think it doesn't make sense like this. 
// Some time. the *it* can't still direct to my original layer. While-Loop doesn't work well. 

} 

我试图声明一个新创建XPathNodeIterator对象tempIt因为这样,

while (it.MoveNext()) 
{ 

    XPathNodeIterator tempIt; 
    tempIt= it; 

    string str = tempIt.Current.GetAttribute("id", tempIt.Current.NamespaceURI); 

    tempIt.Current.MoveToChild("item", ""); 

    // Now I chech *it* on here, I found the *it* also changed it's *current* and "position". and it's count also changed. 
    // I don't know why. 

} 

我怎样才能解决这个问题?

赞赏您的意见和建议。

+1

您已经创建创建XPathNodeIterator,然后你使用DOM风格的导航 - 使用选择方法和学习的XPath。你只需要一个迭代器。 – annakata 2010-12-23 09:35:08

回答

2

也许这可以帮助

while (nodeIterator.MoveNext()) 
{ 
    XPathNavigator n = nodeIterator.Current; 
    Console.WriteLine(n.LocalName); 
} 


XPathDocument document = new XPathDocument("books.xml"); 
XPathNavigator navigator = document.CreateNavigator(); 

XPathNodeIterator nodes = navigator.Select("/bookstore/book"); 
nodes.MoveNext(); 
XPathNavigator nodesNavigator = nodes.Current; 

XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false); 

while (nodesText.MoveNext()) 
    Console.WriteLine(nodesText.Current.Value); 

和Books.xml的

<?xml version="1.0" encoding="utf-8" ?> 
<bookstore> 
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0"> 
     <title>The Autobiography of Benjamin Franklin</title> 
     <author> 
      <first-name>Benjamin</first-name> 
      <last-name>Franklin</last-name> 
     </author> 
     <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2"> 
     <title>The Confidence Man</title> 
     <author> 
      <first-name>Herman</first-name> 
      <last-name>Melville</last-name> 
     </author> 
     <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6"> 
     <title>The Gorgias</title> 
     <author> 
      <name>Plato</name> 
     </author> 
     <price>9.99</price> 
    </book> 
</bookstore>