LINQ to XML,替换子节点但保持状态

时间:2010-02-25 05:47:22

标签: xml linq replace

我已将以下XML作为IQueryable传递给方法,即

XML:

<body>
  <p>Some Text</p>
  <p>Some Text</p>
  <pullquote>This is pullquote</pullquote>
  <p>Some Text</p>
  <p>Some Text</p>
 <body>

方法:

public static string CreateSection(IQueryable<XElement> section)
{
     var bodySection = from b in articleSection.Descendants("body")
                       select b;

     //Do replacement here.

     var bodyElements = bodySection.Descendants();

     StringBuilder paragraphBuilder = new StringBuilder();
     foreach (XElement paragraph in bodyElements)
     {
         paragraphBuilder.Append(paragraph.ToString());
     }

     return paragraphBuilder.ToString();
}

我想要完成的是将<pullquote>替换为<p>(并且可能添加属性)。

我的问题不是实际的替换(XElement.ReplaceWith()),而是替换后的更改并不反映StringBuilder使用的bodySection变量。

我如何才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

您还没有真正显示足够的代码 - 特别是,您没有显示您尝试使用的替换代码。

但是,我怀疑主要问题是bodySection是一个查询。每次使用它时,它都会再次查询section - 如果那是从数据库中提取信息,那么就这样吧。你可能会发现这就是让它做你想做的所有事情:

var bodySection = articleSection.Descendants("body").ToList();

这样你就可以在内存中获取正文部分了,每当你使用bodySection时,你将使用相同的对象集合,而不是再次查询。

答案 1 :(得分:0)

最好使用Xml转换,查看here了解如何操作,here查看xsl语法