我想将我上网的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"/>
答案 0 :(得分:0)
解析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绑定到Row属性。
答案 1 :(得分:0)
链接到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
查找您正在寻找的节点的正确值。