【问题标题】:No output from Linq to XML没有从 Linq 到 XML 的输出
【发布时间】:2010-05-11 12:27:41
【问题描述】:

我有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    XElement xml = XElement.Load(Server.MapPath("ArenasMembers.xml"));

    var query = from p in xml.Descendants("members")
                select new
                {
                    Name = p.Element("name").Value,
                    Email = p.Attribute("email").Value
                };

    foreach (var member in query)
    {
        Response.Write("Employee: " + member.Name + " " + member.Email + "<br />");
    }
}

使用 Visual Studio 中的悬停信息,可以正确读取 XNL 文件,但是 foreach 没有输出任何记录。

XML:

<?xml version="1.0" encoding="utf-8" ?>
<members>
    <member>
        <arena>EAA Office</arena>
        <memberid>1</memberid>
        <name>Jane Doe</name>
        <email>test@gmail.com</email>
    </member>
    <member>
        <arena>EAA Office</arena>
        <memberid>2</memberid>
        <name>John Bull</name>
        <email>jb@ehotmail.org</email>
    </member>
    <member>
        <arena>O2 Arena</arena>
        <memberid>3</memberid>
        <name>John Doe</name>
        <email>john.doe@o2arena.co.uk</email>
    </member>
    <member>
        <arena>O2 Arena</arena>
        <memberid>4</memberid>
        <name>Bernard Cribbins</name>
        <email>bernard@gmail.com</email>
    </member>
    <member>
        <arena>Colourline Arena</arena>
        <memberid>5</memberid>
        <name>John Bon Jovi</name>
        <email>jbj@gmail.com</email>
    </member>
    <member>
        <arena>NIA</arena>
        <memberid>6</memberid>
        <name>Rhianna</name>
        <email>skimpy@gmail.com</email>
    </member>
</members>

你能看出哪里不对吗?

【问题讨论】:

  • 您是否检查过XElement xml = XElement.Load(Server.MapPath("ArenasMembers.xml")); 正在加载 XML?
  • 它是-“在Visual Studio中使用悬停信息,正在正确读取XNL文件”
  • 您应该将该代码和 XML 放入 linqPad。然后,您可以快速测试您的查询并查看 frel 发生了什么。
  • 你为什么用 Element("name") 却用 Attribute("email") 不对...

标签: c# xml linq


【解决方案1】:

Insted of "members" try "member"...

Descendants 返回给定Element 下的所有子元素,在您的代码中,您使用nameemail 查询members,这将不起作用。

示例代码:

 var query = from p in xml.Descendants("member")
                    select new
                    {
                        Name = p.Element("name").Value,
                        Email = p.Element("email").Value
                    };

【讨论】:

  • 这就是我的想法,无法运行代码所以无法验证。
【解决方案2】:

将 Attribute("email") 更改为 Element("email") 对我来说效果很好。经过测试,希望获得批准。

    public void XMLTEst()
    {
        var xml = @"<?xml version='1.0' encoding='utf-8' ?>"
                  + "   <members>"
                  + "  <member>"
                  + "      <arena>EAA Office</arena>                  "
                  + "      <memberid>1</memberid>                     "
                  + "      <name>Jane Doe</name>                      "
                  + "      <email>test@gmail.com</email>              "
                  + "  </member>                                      "
                  + "  <member>                                       "
                  + "      <arena>EAA Office</arena>                  "
                  + "      <memberid>2</memberid>                     "
                  + "      <name>Linda Bull</name>                    "
                  + "      <email>linda.bull@eaaoffice.org</email>    "
                  + "  </member>                                      "
                  + "  <member>                                       "
                  + "      <arena>O2 Arena</arena>                    "
                  + "      <memberid>3</memberid>                     "
                  + "      <name>John Doe</name>                      "
                  + "      <email>john.doe@o2arena.co.uk</email>      "
                  + "  </member>                                      "
                  + "  <member>                                       "
                  + "      <arena>O2 Arena</arena>                    "
                  + "      <memberid>4</memberid>                     "
                  + "      <name>Bernard Cribbins</name>              "
                  + "      <email>bernard@gmail.com</email>           "
                  + "  </member>                                      "
                  + "  <member>                                       "
                  + "      <arena>Colourline Arena</arena>            "
                  + "      <memberid>5</memberid>                     "
                  + "      <name>John Bon Jovi</name>                 "
                  + "      <email>jbj@gmail.com</email>               "
                  + "  </member>                                      "
                  + "  <member>                                       "
                  + "      <arena>NIA</arena>                         "
                  + " <memberid>6</memberid>"
                  + " <name>Rhianna</name>"
                  + "  <email>skimpy@gmail.com</email>"
                  + " </member>"
                  + "</members>";


        XElement xmlFile = XElement.Parse(xml);

        var query = from p in xmlFile.Descendants("member")
                    select new
                    {
                        Name = p.Element("name").Value,
                        Email = p.Element("email").Value
                    };


        foreach (var member in query)
        {
            Response.Write("Employee: " + member.Name + " " + member.Email + "<br />");
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多