ranio Ответов: 1

Как вызвать узел непосредственно из списка узлов и перезаписать внутренний текст без цикла из списка узлов с помощью C#?


Я хочу вызвать узел непосредственно из списка узлов и перезаписать внутренний текст без цикла из списка узлов с помощью c#. В настоящее время я могу сделать это с помощью цикла. Xml показан ниже и часть кода также есть в блоке кода

Xml выглядит следующим образом:

<?xml version="1.0"?>

<DTSConfiguration>


<DTSConfigurationHeading>

<DTSConfigurationFileInfo GeneratedDate="06/04/2018 11:06:33" GeneratedFromPackageID="{5A776659-3F33-4F34-A91A-D4BC80548271}" GeneratedFromPackageName="Package" GeneratedBy="CHN\Hasna.EK"/>

</DTSConfigurationHeading>


<Configuration ValueType="Boolean" Path="\Package.Connections[Flat File Connection Manager].Properties[AlwaysCheckForRowDelimiters]" ConfiguredType="Property">

<ConfiguredValue>-1</ConfiguredValue>

</Configuration>


-<Configuration ValueType="Int32" Path="\Package.Connections[Flat File Connection Manager].Properties[CodePage]" ConfiguredType="Property">

<ConfiguredValue>1252</ConfiguredValue>

</Configuration>


-<Configuration ValueType="Boolean" Path="\Package.Connections[Flat File Connection Manager].Properties[ColumnNamesInFirstDataRow]" ConfiguredType="Property">

<ConfiguredValue>-1</ConfiguredValue>

</Configuration>


-<Configuration ValueType="String" Path="\Package.Connections[Flat File Connection Manager].Properties[ConnectionString]" ConfiguredType="Property">

<ConfiguredValue>E:\SSIS\Test3\emp.txt</ConfiguredValue>

</Configuration>

</DTSConfiguration>


Что я уже пробовал:

Код как показано ниже;
 string filename = "emp3.txt";

string dtConfigfilename = @"E:\SSIS\x.dtsConfig"; (Package Config File Configurable)
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(dtConfigfilename);
XmlNodeList nodeList = xmldoc.DocumentElement.ChildNodes;



foreach (XmlElement element in nodeList)
{
    if (element.Name == "Configuration")
    {
        if (element.Attributes["Path"].InnerText == "\\Package.Connections[Flat File Connection Manager].Properties[ConnectionString]")
        {
            element.ChildNodes[0].InnerText = @"E:\SSIS\Test2\" + filename; (Configurable file Store Folder)
            break;
        }
    }
}
xmldoc.Save(dtConfigfilename);

1 Ответов

Рейтинг:
0

Maciej Los

Воспользуйся XmlDocument.Метод SelectSingleNode (System.Xml)[^]


ranio

Я попробовал описанный выше метод, но не могу использовать его, так как дочерний узел конфигурации находится там несколько раз. я хочу получить часть ConnectionString с дочерним узлом конфигурации в структуре XML. Мне нужно избегать цикла foreach, который в настоящее время используется.
Xml выглядит следующим образом:
<?xml version="1.0"?>

<dtsconfiguration>


<dtsconfigurationheading>

<DTSConfigurationFileInfo GeneratedDate="06/04/2018 11:06:33" GeneratedFromPackageID="{5A776659-3F33-4F34-A91A-D4BC80548271}" GeneratedFromPackageName="Package" GeneratedBy="CHN\Hasna.EK"/>




<конфигурация ValueType="Boolean" Path="\Package.Соединения[Диспетчер Соединений С Плоскими Файлами].Свойства[AlwaysCheckForRowDelimiters]" ConfiguredType="Property">

<configuredvalue>-1




-<конфигурация ValueType="Int32" Path="\Package.Соединения[Диспетчер Соединений С Плоскими Файлами].Свойства[кодовая страница]" ConfiguredType="Property">

<configuredvalue>1252




-<конфигурация ValueType="Boolean" Path="\Package.Соединения[Диспетчер Соединений С Плоскими Файлами].Свойства[ColumnNamesInFirstDataRow]" ConfiguredType="Property">

<configuredvalue>-1




-<конфигурация ValueType="String" Path="\Package.Соединения[Диспетчер Соединений С Плоскими Файлами].Properties[ConnectionString]" ConfiguredType="Property">

<configuredvalue>E:\SSIS\Test3\emp.txt



</DTSConfiguration




док.SelectSingleNode("/DTSConfiguration/DTSConfigurationheading/Configuration").InnerText = "тест";