XML заменяет значение узла

#xml #tsql

#xml #tsql

Вопрос:

Я пытаюсь обновить XML-узел, и хотя он не выдает ошибку, он не обновляет значение.

xml

     <ParameterValues>
  <ParameterValue>
    <Name>TO</Name>
    <Value>test@test.com.au</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>IncludeReport</Name>
    <Value>True</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>RenderFormat</Name>
    <Value>MHTML</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>Subject</Name>
    <Value>@ReportName was executed at @ExecutionTime</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>IncludeLink</Name>
    <Value>True</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>Priority</Name>
    <Value>NORMAL</Value>
  </ParameterValue>
</ParameterValues>
  

Строка обновления.

  1. (Это то, что я пытаюсь изменить — <Value>test@test.com.au</Value> )

    установите @input.modify(‘замените значение (/ParameterValues/Параметрическое значение/Name/Value/ text())[1] на «D.1234@EEEER.COM.AU «‘)

Если я изменю строку для обновления имени узла, она обновится с помощью «D.1234@EEEER.COM.AU «?

1. <Name>TO</Name>

установить @input.modify(‘заменить значение (/ParameterValues/Параметрическое значение/Name/ text())[1] на «D.1234@EEEER.COM.AU «‘)

Пример результата

 <ParameterValues>
  <ParameterValue>
    <Name>D.1234@EEEER.COM.AU</Name>
    <Value>d.brown@orrcon.com.au</Value>
  </ParameterValue>
  

Комментарии:

1. Что именно вы пробовали? На каком языке или инструменте set выполняется?

2. Извините, забыл упомянуть, где я это делал. TSQL. Что я пробовал, так это:- установить @input.modify(‘заменить значение (/ParameterValues/Параметрическое значение/Name/Value/ text())[1] на «D.1234@EEEER.COM.AU «‘)

3. Пожалуйста, добавьте TSQL в свой вопрос теги, чтобы эксперты в этой области могли вам помочь. xP

Ответ №1:

все, что вы хотите, сэр, это обновить … попробуйте использовать это

 $doc = new DOMDocument();
$doc->load( xml file name );

$doc->formatOutput = true;
$doc->getElementsByTagName("Value")->item(0)->nodeValue = $TheNewValue; 
$doc->save("pathwheroverwritethefile");
  

хотел бы я помочь …. я думаю, что значение массива в item является ошибкой…

Ответ №2:

У вас есть дополнительный Name узел, указанный в вашем заявлении об обновлении.

Попробуйте вместо этого заменить значение первого ParameterValue узла следующим образом.

 replace value of (/ParameterValues/ParameterValue/Value/text())[1] 
                    with "D.1234@EEEER.COM.AU"
  

Если вы хотите убедиться, что вы заменяете только значение ParameterValue where Name is TO , вам следует использовать предикат для ParameterValue узла.

 replace value of (/ParameterValues/ParameterValue[Name = "TO"]/Value/text())[1] 
                    with "D.1234@EEEER.COM.AU"')
  

Комментарии:

1. Спасибо. Я новичок, это было просто, но я не мог видеть деревья для форреста.