用新值替换整个XmlElement

时间:2011-11-22 10:06:53

标签: c# xml c#-2.0

我有以下代码,其中我正在使用html,然后阅读所有imga链接。请注意,这是C#2.0。

string xml = "<xhtml>" + inputXhtml + "</xhtml>";
XmlDocument node = new XmlDocument();
node.LoadXml(xml);
foreach (XmlElement element in TemplateUtilities.SelectNodes(node, "//html:img[@xlink:href]|//html:a[@xlink:href]"))
{
    bool flag = element.LocalName == "img";
    lStrCompLinkText = "";
    XmlAttributeCollection attributes = element.Attributes;
    XmlAttribute namedItem = (XmlAttribute)attributes.GetNamedItem("href", "http://www.w3.org/1999/xlink");
    string str2 = namedItem.Value;              
    Component currentObject = engine.GetObject(str2) as Component;
    if (flag)
    {
        element.SetAttribute("src", str2);
    }
    else
    {
        foreach (XmlNode xnode in element.ChildNodes)
        {
            lStrCompLinkText = lStrCompLinkText + xnode.OuterXml;
        }   
        string attr = ComponentBase.ComponentHelper.ComponentLinkAttributes(element, engine);       
        string compLink = ComponentBase.ComponentHelper.DisplayPublishedComponentLink(currentObject, lStrCompLinkText, attr, engine, package, pageObject);

        attributes.RemoveNamedItem("href", "http://www.tridion.com/ContentManager/5.0");
        //Here I want to replace whole element with the compLink
    }
    attributes.RemoveNamedItem("href", "http://www.w3.org/1999/xlink");
    attributes.RemoveNamedItem("type", "http://www.w3.org/1999/xlink");
    attributes.RemoveNamedItem("title", "http://www.w3.org/1999/xlink");
}

现在我想用新值compLink重新编译我的元素并添加回输入HTML

请建议

2 个答案:

答案 0 :(得分:1)

在您的评论“//我想要替换”的位置出现以下内容。

从compLink的竞争对手创建XML文档(假设它是XML)。

XmlDocument xmlTemp = new XmlDocument();
xmlTemp.loadXml( compLink );

使用以下代码

从其父级中删除原始元素
XmlNode ndParent = element.ParentNode;
ndParent.RemoveChild( element);

导入新的xmlTemp并将其附加到父

XmlNode ndImport = ndParent.OwnerDocument.ImportNode( xmlTemp.documentElement, true );
ndParent.AppendChild( ndImport.CloneNode( true ) );

答案 1 :(得分:1)

我使用以下逻辑解决了上述问题:

XmlDocument lObjTCDCodeDom = new XmlDocument();
lObjTCDCodeDom.LoadXml("<TCDCode/>");
lObjTCDCodeDom.DocumentElement.InnerText = compLink;
element.ParentNode.ReplaceChild(node.ImportNode(lObjTCDCodeDom.DocumentElement, true), element);

然后进一步写了XSLT,检查<TCDCode/>并替换它然后我得到实际更新的xml。