0

我想从 xml 文件中获取数据。我正在从上一页获取节点的 ID。在下一页上,我想显示该 id 的 xml 中的数据。我正在使用查询字符串传递节点的 ID,但是当我运行我的代码时,它给了我这个错误

System.Xml.XmlException:根级别的数据无效。第 1 行,位置 1。

这是我的代码

XElement xid = XElement.Parse(Request.QueryString["ID"]);

// var id = Request.QueryString["ID"];

var doc = XDocument.Load(Server.MapPath("~/Data/BlogContent.xml"));
var result = doc.Descendants("post")
                .Where(x => x.Element("id") == xid)
                .Select(x => new
                {
                    id = x.Element("id").Value,
                    title = x.Element("title").Value,
                    Discription = x.Element("Discription").Value,
                    dt = x.Element("dt").Value,
                    mnt = x.Element("mnt").Value,
                    yr = x.Element("yr").Value
                }).OrderByDescending(x => x.id).Take(5);

Repeater1.DataSource = result;
Repeater1.DataBind();

这是我的xml

<?xml version="1.0" encoding="utf-8"?>
<content>
  <post>
    <id>1</id>
    <title>fds</title>
    <Discription>fdsafsdf</Discription>
    <dt>21</dt>
    <mnt>6</mnt>
    <yr>2013</yr>
  </post>
</content>

请告诉我哪里出错了

4

1 回答 1

2

您没有指出导致错误的行,但我敢打赌是这个:

XElement xid = XElement.Parse(Request.QueryString["ID"]);

查询字符串中的“ID”很可能是某种标识符,而不是XML - 因此是错误。

像这样的东西是你想要的:

string xid = Request.QueryString["ID"];

然后你可以在你的where子句中使用它。

此外,您的 where 子句中有一个错误 - 您正在尝试将 anXElement与一个值进行比较 - 您需要使用它的Value属性获取 XElement 的值:

Where(x => x.Element("id").Value == xid)

XElement.Value返回一个字符串 - 因此只需从查询字符串中获取字符串值,然后在 where 子句的比较中使用它。

一切都放在一起

string xid = Request.QueryString["ID"];

var doc = XDocument.Load(Server.MapPath("~/Data/BlogContent.xml"));
var result = doc.Descendants("post")
                .Where(x => x.Element("id").Value == xid)
                .Select(x => new
                {
                    id = x.Element("id").Value,
                    title = x.Element("title").Value,
                    Discription = x.Element("Discription").Value,
                    dt = x.Element("dt").Value,
                    mnt = x.Element("mnt").Value,
                    yr = x.Element("yr").Value
                }).OrderByDescending(x => x.id).Take(5);

Repeater1.DataSource = result;
Repeater1.DataBind();
于 2013-06-22T07:41:56.553 回答