1

我有一个 xml 标签,如:

<p xmlns="http://www.w3.org/1999/xhtml">Text1<span title="instruction=componentpresentation,componentId=1234,componentTemplateId=1111">CPText2CP</span></p>

如果我必须<span title="instruction=componentpresentation,componentId=1234,componentTemplateId=1111">CPText2CP</span>

<componentpresentation componentID="1234" templateID="1111" dcpID="dcp1111_1234" dcplocation="/wip/data/pub60/dcp/txt/dcp1111_1234.txt">Text2</componentpresentation>

是否有任何可能的方式来实现这一点,请提出建议/更改。

编辑

从上面的标签中,我可以将完整<span></span>标签作为一个字符串,标签之间有文本。任何建议。

4

2 回答 2

2

你可以这样做:

        string input = @"
            <p xmlns=""http://www.w3.org/1999/xhtml"">
                Text1
                <span title=""instruction=componentpresentation,componentId=1234,componentTemplateId=1111"">
                    CPText2CP
                </span>
            </p>";


        XDocument doc = XDocument.Parse(input);
        XNamespace ns = doc.Root.Name.Namespace;

        // I don't know what filtering criteria you want to use to 
        // identify the element that you wish to replace,
        // I just searched by "componentId=1234" inside title attribute
        XElement elToReplace = doc
            .Root
            .Descendants()
            .FirstOrDefault(el => 
                el.Name == ns + "span" 
                && el.Attribute("title").Value.Contains("componentId=1234"));

        XElement newEl = new XElement(ns + "componentpresentation");

        newEl.SetAttributeValue("componentID", "1234");
        newEl.SetAttributeValue("templateID", "1111");
        newEl.SetAttributeValue("dcpID", "dcp1111_1234");
        newEl.SetAttributeValue("dcplocation", 
            "/wip/data/pub60/dcp/txt/dcp1111_1234.txt");

        elToReplace.ReplaceWith(newEl);

您的需求可能会有所不同,但要走的路是创建XDocumentXElement搜索它以查找需要替换的元素,然后用于ReplaceWith替换它们。请注意,您必须考虑命名空间,否则将无法检索元素。

于 2012-09-07T07:43:39.320 回答
1

是的。

请执行下列操作:

  1. 读取文件(作为 XML 或纯文本
  2. 搜索标签/序列或其子字符串
  3. 将序列替换为新序列
于 2012-09-07T07:21:52.477 回答