C# 使用过滤器从Linq到XML提取CDATA的内部值

C# 使用过滤器从Linq到XML提取CDATA的内部值,c#,xml,linq,C#,Xml,Linq,我使用以下代码从XML中检索所需的值: IEnumerable<ForewordReview> reviews = null; try { reviews = from item in xmlDoc.Descendants("node") select new ForewordReview() { PubDate = item.Element("created").ToString()

我使用以下代码从XML中检索所需的值:

IEnumerable<ForewordReview> reviews = null;
try
{
    reviews = from item in xmlDoc.Descendants("node")
              select new ForewordReview()
              {
                  PubDate = item.Element("created").ToString(),
                  Isbn = item.Element("isbn").ToString(),
                  Summary = item.Element("review").ToString()
              };
} // ...
我有点了解这里发生了什么,但我不确定这是否与我使用Linq的方式(具体地说,从选定的项目构建一个对象)一致

我是否需要对select语句中的项单独应用此筛选器?否则,我真的不明白这将如何与我正在使用的代码一起工作

一如既往,我感谢您的帮助。

:

这也适用于其他数据类型,如
int
float
DateTime
等:

reviews = from item in xmlDoc.Descendants("node")
          select new 
          {
              PubDate = (DateTime)item.Element("created")
          };
// Output:
// {
//      PubDate = 1/23/2012 12:40:57
// }
.

这也适用于其他数据类型,如
int
float
DateTime
等:

reviews = from item in xmlDoc.Descendants("node")
          select new 
          {
              PubDate = (DateTime)item.Element("created")
          };
// Output:
// {
//      PubDate = 1/23/2012 12:40:57
// }

.

请记住,以下内容的含义没有区别:

<a>
 <b>Hello</b>
 <c>&amp; hello again</c>
</a>

你好
&又是你好

<a>
 <b><![CDATA[Hello]]></b>
 <c><![CDATA[& hello again]]></c>
</a>

由于您正在调用
ToString()
并获取全部内容-打开和关闭标记、实体引用等仍然是XML形式,因此您必须准备好以XML形式处理它。如果不是,问题不在于您在此处显示的代码,而在于
PubDate
可用的代码
“2012-01-23 12:40:57”
现在 如果它完全等同于“”,那就不好了


要么更改代码以真正解析XML(框架提供了很多帮助),要么更改代码以自行获取日期并使用
元素(“创建”).Value
检索它。

请记住,以下内容的含义没有区别:

<a>
 <b>Hello</b>
 <c>&amp; hello again</c>
</a>

你好
&又是你好

<a>
 <b><![CDATA[Hello]]></b>
 <c><![CDATA[& hello again]]></c>
</a>

由于您正在调用
ToString()
并获取全部内容-打开和关闭标记、实体引用等仍然是XML形式,因此您必须准备好以XML形式处理它。如果不是,问题不在于您在此处显示的代码,而在于
PubDate
可以使用的代码2012-01-23 12:40:57“现在 如果它完全等同于“”,那就不好了


要么更改代码以真正解析XML(框架提供了很多帮助),要么更改代码以自行获取日期并使用
元素(“创建”).Value
检索它。

因为
XNode.ToString
“[r]为该节点返回缩进的XML,“。而显式强制转换提供了检索“所有元素文本和子代文本的连接字符串值”的功能。感谢您提供的最全面的帮助。我对此表示感谢。因为
XNode.ToString
”[r]eturns此节点的缩进XML,”。而显式强制转换提供了检索“所有元素文本和子代文本的连接字符串值”的能力。感谢您提供的最全面的帮助。我对此表示感谢。啊,也感谢您。我确实注意到在调试过程中,它似乎抓住了整个标记-因此出现了“to string”.NP.sixlettervariables以另一种方式在我之前加入了,做同样的事情,出于同样的原因,但添加稍微不同的解释并没有什么坏处。这当然没有坏处。另一方面,您对您的解释做了更多。您的语句“更改代码以真正解析XML”,让我真正思考了我在用上面的代码做什么。再次感谢。啊,也谢谢你。我确实注意到在调试中它似乎抓住了整个标记-因此出现了“to String”.NP.sixlettervariables以另一种方式在我之前加入了,做同样的事情,出于同样的原因,但添加稍微不同的解释并没有什么坏处。这当然没有坏处。另一方面,您对您的解释做了更多。您的语句“更改代码以真正解析XML”,让我真正思考了我在用我的上述代码做什么。再次感谢。