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 句にエラーがあります - を値と比較しようとしています -プロパティXElementを使用して XElement の値を取得する必要があります。Value

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 に答える