Как заменить строку преобразованиями XDT

Моя конфигурация, которую я хочу преобразовать, выглядит так:

<sdfsdfsd>

<blah>
<mypath>D:\my\old\path\aaa</mypath>
</blah>

<blah>
<mypath>D:\my\old\path\bbb</mypath>
</blah>

<blah>
<mypath>D:\my\old\path\ccc</mypath>
</blah>

</sdfsdfsd>

Все, что я хочу сделать, это заменить D:\my\old\path\<unique value> на D:\my\new\path\<unique value>

Я видел только примеры замены полного значения между ‹>‹> или свойства внутри ‹>. Я просто хочу сделать простую замену строки везде в файле, возможно ли это?


person red888    schedule 13.06.2017    source источник
comment
Вы можете заменить все атрибуты, но не можете заменить все значения с помощью xdt, см.. Например, <mypath xdt:Transform="SetAttributes" xdt:Locator="XPath(//blah/*)" path="D:\h" /> замените все атрибуты пути в элементах mypath, используя XPath. К сожалению, заменить часть атрибута нельзя. Преобразование XSLT может заменить значение всех элементов, но я не уверен, что оно может заменить часть строки.   -  person George Alexandria    schedule 13.06.2017


Ответы (1)


Попробуйте xml-линк

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = 
                "<sdfsdfsd>" +
                    "<blah>" +
                    "<mypath>D:\\my\\old\\path\\aaa</mypath>" +
                    "</blah>" +
                    "<blah>" +
                    "<mypath>D:\\my\\old\\path\\bbb</mypath>" +
                    "</blah>" +
                    "<blah>" +
                    "<mypath>D:\\my\\old\\path\\ccc</mypath>" +
                    "</blah>" +
                "</sdfsdfsd>";

            XElement element = XElement.Parse(xml);

            foreach(XElement mypath in  element.Descendants("mypath"))
            {
                mypath.SetValue(((string)mypath).Replace("old","new"));
            }

        }
    }
}
person jdweng    schedule 13.06.2017
comment
Я не хочу делать это программно. Для всех сумасшедших вещей, которые могут делать преобразования XDT, они должны уметь выполнять простую замену строки. - person red888; 13.06.2017
comment
Вместо XLinq он может сразу использовать преобразование xdt, которое имеет новое значение элемента... - person George Alexandria; 13.06.2017