首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReplaceWith XElement

ReplaceWith XElement
EN

Stack Overflow用户
提问于 2016-01-05 17:46:27
回答 1查看 809关注 0票数 0

下面是我的XDocument内容片段。

代码语言:javascript
复制
    <p style="">
            <img id="Object3"  src="Object3_png16malpha.png" width="78" height="37" />
    </p>
    <p style="">
        <span>1 point: correct response of Point </span>X: 
        <img id="Object4"  src="Object4_png16malpha.png" width="76" height="37" /> Point y: 
        <img id="Object5"  src="Object5_png16malpha.png" width="78" height="37" /> Point z: 
        <img id="Object6"  src="Object6_png16malpha.png" width="78" height="37" />. 
        <span style="">(1 point).</span>
    </p>
<accessElement identifier="1234">
    <contentLinkInfo LinkIdentifierRef="9_BEGIN" type="Text">
        <objectLink />
    </contentLinkInfo>
</accessElement>

基本上,我试图用新的内容替换每个图像<img>标记。对于图像,<Tag> of Object3在处理后如下所示。

代码语言:javascript
复制
<span class="mathml" data-png="Object3_png16malpha.png" data-svg="Object3_png16malpha.svg">
    <img id="Object3" alt="" src="Object3_png16malpha.png" />
</span>

但是下面是我得到的输出,它跳过了一些图像标记的处理,我不确定。

代码语言:javascript
复制
<p style="">
        <span class="mathml" data-png="Object3_png16malpha.png" data-svg="Object3_png16malpha.svg">
            <img id="Object3" alt="" src="Object3_png16malpha.png" />
    </span>
</p>
<p style="">
    <span>1 point: correct response of Point </span>X: 
    <span class="mathml" data-png="Object4_png16malpha.png" data-svg="Object4_png16malpha.svg">
        <img id="Object4" alt="" src="Object4_png16malpha.png" />
    </span> Point y: 
    <img id="Object5"  src="Object5_png16malpha.png" width="78" height="37" /> Point z: 
    <img id="Object6"  src="Object6_png16malpha.png" width="78" height="37" />. 
    <span style="">(1 point).</span>
</p>
<accessElement identifier="1234">
    <contentLinkInfo LinkIdentifierRef="9_BEGIN" type="Text">
        <objectLink />
    </contentLinkInfo>
</accessElement>

下面是我的代码片段

代码语言:javascript
复制
  foreach (XElement bodyElement in uthDocument.Descendants().Elements())
        {
            if (bodyElement.Name == "img")
            {
                XElement newImageElement = getNewImageElement(bodyElement);
                bodyElement.ReplaceWith(newImageElement);
            }

        }

我的代码跳过了最后两个图像元素的替换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 21:53:28

LINQ的结构类似于一个链接列表-每个节点都有一个对其下一个节点的引用。

当您用新的bodyElement替换原始的bodyElement时,bodyElement所指向的下一个节点现在是null,因为您已经将它从树中取出。因此,最有可能的是,您的一个迭代器会在此时中断并返回。

顺便说一句,您也不需要Elements()调用,因为您将多次迭代大多数元素。Descendants()将返回下面的所有元素。

因此,只需急切地评估Descendants()并迭代它:

代码语言:javascript
复制
foreach (XElement bodyElement in uthDocument.Descendants().ToList())
{
    ...
}

理想情况下,在调用ToList()之前对其进行过滤。假设这是XHTML,这非常简单:

代码语言:javascript
复制
XNamespace xhtml = "http://www.w3.org/1999/xhtml";
var imgElements = uthDocument.Descendants(xhtml + "img").ToList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34618073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档