根据查询参数从XML中检索值?

时间:2013-08-15 14:26:08

标签: c# xml linq xaml windows-phone-8

我有以下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);
            }
        }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

非常感谢任何帮助,谢谢!!

1 个答案:

答案 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");