0

我有以下 XML 文件,由我的 Windows Phone 8 应用程序生成。

到目前为止一切正常,但现在我希望能够查询文件,并检索与特定关联的文件——因此,如果我针对“2222 它”查询它,将返回“位置名称”。

我尝试了几种方法来做到这一点,但我意识到即使经过数小时的研究,我也不知道如何实现这一目标。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>

下面是处理解析从 UriAssociationMapper 传递的 uid 的 .cs 部分。

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);
            }
        }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

任何帮助将不胜感激谢谢!

4

1 回答 1

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");
于 2013-08-15T16:45:41.860 回答