2010-12-23 207 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>