LINQ到XML,更换子节点,但保持状态(LINQ to XML, replace child no

2019-10-20 00:37发布

我已经得到了作为一个IQueryable通过了以下XML的方法,即

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变量。

我怎么会去得到这个工作?

Answer 1:

你还没有真正显示出足够的代码-尤其是你还没有显示你正在尝试使用的替换代码。

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

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

你已经这样,然后得到身体部分在内存中,并使用任何时候bodySection你会使用对象的同一集合,而不是再次查询。



Answer 2:

这将是更好地使用XML Tramsformation,看这里如何做到这一点,并在这里为XSL语法



文章来源: LINQ to XML, replace child nodes but keep state
标签: xml linq replace