我想将我联机的 XML 文件中的值绑定到我的 XAML 代码中,在应用中显示该值。
我的应用程序非常简单。
我使用 XDocument 读取带有货币汇率的 xml 文件。我想在线选择在 xml 中如下所示的USD_Sell值。
<row>
<swift_code>USD</swift_code>
<swift_name>american Dollar</swift_name>
<multiply>1</multiply>
<buy_cash>8,5199</buy_cash>
<buy_tc>8,2643</buy_tc>
<sell_cash>9,3801</sell_cash>
<sell_tc>9,4739</sell_tc>
</row>
那么到目前为止,我的主要方法仅如下所示。
using Xamarin.Forms;
using System.Xml.Linq;
namespace CurrencyConverter
{
public partial class CurrencyConverterPage : ContentPage
{
public CurrencyConverterPage()
{
InitializeComponent();
}
static void Main(string[] args)
{
XDocument xmlDoc = XDocument.Load("http://www.forex.se/ratesxml.asp? id=492");
}
}
}
而我的 XAML 看起来像这样。
<Label Text="USD Sell"
TextColor="Black"
Font="Medium"
HorizontalOptions="Center"/>
<Label Text="{Binding USDSell}"
TextColor="Black"
Font="Medium"
HorizontalOptions="Center"/>
解析 XML 以绑定到 C# 类,我使用
http://xmltocsharp.azurewebsites.net/
要得到
[XmlRoot(ElementName = "row")]
public class Row
{
[XmlElement(ElementName = "swift_code")]
public string Code { get; set; }
[XmlElement(ElementName = "sell_cash")]
public string SellCash { get; set; }
[XmlElement(ElementName = "sell_tc")]
public string SellTc { get; set; }
}
[XmlRoot(ElementName = "web_dis_rates")]
public class WebRates
{
[XmlElement(ElementName = "row")]
public List<Row> Rows { get; set; }
}
现在,您可以使用 HttpClient 和 StreamReader 将其反序列化回对象:
async Task<Row> GetRow()
{
XmlSerializer xs = new XmlSerializer(typeof(WebRates));
using (HttpClient client = new HttpClient())
{
using (StreamReader reader = new StreamReader(await client.GetStreamAsync("http://www.forex.se/ratesxml.asp?id=492")))
{
WebRates root = (WebRates)xs.Deserialize(reader);
return root.Rows.FirstOrDefault(x => x.Code == "USD");
}
}
}
现在可以将 ItemsSource 设置为 GetRows,并在 XAML 中绑定到行属性。
链接到 Xamarin 论坛中的响应:https://forums.xamarin.com/discussion/comment/248361#Comment_248361
var document = XDocument.Load("http://www.forex.se/ratesxml.asp? id=492");
var row = document.Descendants("row").FirstOrDefault();
if(row != null)
{
var sellCash = row.Element("sell_cash")?.Value;
USDSellLabel.Text = sellCash;
}
使用 Descendants
和 Elements
查找要查找的节点的适当值。