我有以下XML文件,由我的Windows Phone 8应用程序生成。
到目前为止所有工作都有效,但现在我希望能够查询该文件,并检索与特定关联的文件 - 因此,如果我查询它“2222 it”将返回“Location Name”。
我尝试了几种方法,但我意识到即使经过数小时的研究,我也不知道如何实现这一目标。 XML和LINQ让我感到无比迷惑....所以我真的很感激任何人都可以提供的任何教程或技巧!到目前为止,代码低于示例XML文档。
非常感谢
<?xml version="1.0" encoding="utf-8"?>
<SmartSafe>
<Tag>
<tag>22222</tag>
<name>Location Name</name>
<latitude>xx.xxxxxxx</latitude>
<longitude>xx.xxxxxxx</longitude>
</Tag>
<Tag>
<tag>4444</tag>
<name>Location Name</name>
<latitude>xx.xxxxxxx</latitude>
<longitude>xx.xxxxxxx</longitude>
</Tag>
<Tag>
<tag>4444</tag>
<name>Location Name</name>
<latitude>xx.xxxxxxx</latitude>
<longitude>xx.xxxxxxx</longitude>
</Tag>
<Tag>
<tag>4444</tag>
<name>Location Name</name>
<latitude>xx.xxxxxxx</latitude>
<longitude>xx.xxxxxxx</longitude>
</Tag>
</SmartSafe>
下面是.cs的一部分,它处理解析从UriAssociationMapper传递的uid。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("uid"))
{
uid = int.Parse(NavigationContext.QueryString["uid"]);
}
base.OnNavigatedTo(e);
string stringUid = uid.ToString();
tagID.Text = stringUid;
//Retrieve tag name from xml
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
XDocument document;
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
if (storage.FileExists("/tagRegistry.xml"))
{
using (var stream = storage.OpenFile("/tagRegistry.xml", FileMode.Open))
{
document = XDocument.Load(stream);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
非常感谢任何帮助,谢谢!!
答案 0 :(得分:0)
您的LINQ to XML查询应如下所示:
var value = doc.Root.Elements("Tag")
.FirstOrDefault(t => (string)t.Element("tag") == "22222")
.Element("name").Value;
但是,如果找不到元素,它将抛出NullReferenceException
,因此如果您不确定XML文档是否包含您要查找的内容,则不应使用它。如果你不确定,你应该使用以下代码:
var tag = doc.Root.Elements("Tag")
.FirstOrDefault(t => (string)t.Element("tag") == "22222");
var value = tag == null ? string.Empty : (string)tag.Element("name");