2012-11-29 64 views
2

str1和str2是字符串變量,它保留要訪問的節點的值,在本例中爲str1 =「abc」和str2 =「efg」。變量x是一個整數,當我運行我的程序,我得到一個「值太大或太小,INT32」錯誤:值太小或太大錯誤

XPathDocument xmlDoc = new XPathDocument(path); 
XPathNavigator course= xmlDoc.CreateNavigator();     
XPathNodeIterator value = course.Select("/root/x[@atr =" + str1 + "]/y[@atr =" + str2 + "]/value1"); 
x = Convert.ToInt32(value.Current.Value); 

我的XML是:

  <root> 
       <x atr = "abc"> 
        <y atr ="efg"> 
         <value1>12</value1> 
         <value2>25</value2> 
         <value3>16</value3> 
        </y> 
       </x> 
      </root> 
+3

什麼如果您打印該值,而不是將其提供給Convert.ToInt32? (你的XPath和XML在這篇文章中不匹配) –

+1

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

我需要將Xpath中的值加載到變量 – JeliBeanMachine

回答

3

編輯:它的這一個簡單的例子:"/root/x[@atr ='" + str1 + "']/y[@atr ='" + str2 + "']/value1"你的東東d引用路徑中屬性的字符串。

您將構建xpath /root/x[@atr=abc]/y[@atr=efg]/value1此構建/root/x[@atr='abc']/y[@atr='efg']/value1與大多數語言一樣,字符串也需要在xpath中引用引號。


與你原來的代碼的問題是,隨着XPathNodeIterator你需要我使用電話value.Current

XPathNodeIterator value = course.Select("/root/x/y/value1"); 
value.MoveNext(); 
x = Convert.ToInt32(value.Current.Value); 

完整的示例代碼之前調用value.MoveNext();

var doc = XDocument.Parse(@"<root> 
    <x> 
     <y> 
      <value1>12</value1> 
      <value2>25</value2> 
      <value3>16</value3> 
     </y> 
    </x> 
</root>"); 

////Also works for XmlDocument 
//XmlDocument doc = new XmlDocument(); 
//doc.LoadXml(@"<root> 
// <x> 
//  <y> 
//   <value1>12</value1> 
//   <value2>25</value2> 
//   <value3>16</value3> 
//  </y> 
// </x> 
//</root>"); 

XPathNavigator course = doc.CreateNavigator(); 

XPathNodeIterator value = course.Select("/root/x/y/value1"); 
Console.WriteLine(value.Current.Value); //Outputs 122516, which is the same as doc.Root.Value or XmlDocument.InnerText 
value.MoveNext(); 
Console.WriteLine(value.Current.Value); //Outputs 12, correctly 
int x = Convert.ToInt32(value.Current.Value); //Parses fine 
+0

不幸的是沒有工作。和以前一樣的錯誤 – JeliBeanMachine

+1

你確定這個例外來自這個代碼嗎?我們能否看到加載xml的位置並創建Navigator?我創建了自己的示例代碼,可以與您的xml示例很好地協作。 – Thymine

+0

我已經更新了我的代碼,以包含加載文件語句和創建導航語句的位置。 – JeliBeanMachine

1

我只想用的XDocument的擴展方法XPathSelectElement就像下面的例子:

var doc = XDocument.Parse(@"<root> 
    <x atr = 'abc'> 
     <y atr = 'efg'> 
      <value1>12</value1> 
      <value2>25</value2> 
      <value3>16</value3> 
     </y> 
    </x> 
</root>"); 

var x = int.Parse(doc.XPathSelectElement("/root/x[@atr =\"abc\"]/y[@atr = \"efg\"]/value1").Value); 
Console.WriteLine(x); 
+0

使用此方法,我得到「根級別的數據無效」錯誤? – JeliBeanMachine

+0

@JeliBeanMachine你會得到哪個錯誤? –

+0

var doc = XDocument.Parse(file.xml)。我是否需要解析實際內容? – JeliBeanMachine

相關問題