2016-10-03 140 views
1

我使用Xamarin和LINQ從文件中提取XML元素的值並將它們顯示在屏幕上。在C#程序是顯示空白的XML元素值

Button b = (Button)FindViewById<Button>(Resource.Id.button); 

    TextView t = (TextView)FindViewById<TextView>(Resource.Id.textView); 

    XDocument X = XDocument.Load(Assets.Open("DataDump.xml")); 

    XElement nodex = X.Element("x"); 
    XElement nodey = X.Element("y"); 
    XElement nodez = X.Element("z"); 
    XElement noder = X.Element("RightClick"); 
    XElement nodel = X.Element("LeftClick"); 

    b.Click += (object sender, EventArgs e) => 
    { 


     t.Text = string.Format(" x={0}\n y={1}\n z={2}", nodex, nodey, nodez); 
    }; 

XML文件是

<?xml version="1.0" encoding="utf-8" ?> 
 
<root> 
 
    <x>0.214</x> 
 
    <y>0.396</y> 
 
    <z>9.842</z> 
 
    <LeftClick>1</LeftClick> 
 
    <RightClick>0</RightClick> 
 
</root>

輸出是:

enter image description here

我沒有得到任何錯誤或異常,但在輸出中所有元素的e值都顯示爲空白。

我怎樣才能讓它顯示正確的值?

更新:我試着四處閱讀並修改了一些代碼,我認爲出於某種原因,程序似乎認爲x,y & z的值都是空的,即使我初始化了它們。

回答

2

爲了得到一個XElement的價值,你可以調用Value財產

var nodex = X.Root.Element("x").Value; 

或投射到類型即值:

var nodex = (decimal)X.Root.Element("x"); 

如果您加載使用XElement.Load方法你要直接加載文檔的根元素的XML,所以,你可以得到的孩子,你想在你的崗位上做到:

XElement X= XElement.Load(Assets.Open("DataDump.xml")); 
var nodex = X.Element("x").Value; 
//... 

相關詳細信息主題看看這link

+0

非常感謝!這工作完美 – Robby

1

X是您的文檔。 Element返回子元素。您的文檔中唯一的子元素是root - 因此您所有的查詢都將返回null,因爲這些子元素都不存在。

在這種情況下,最明顯的解決方法是調用Elementroot

X.Root.Element("x")