XML替换节点值

时间:2014-07-07 02:47:11

标签: 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(&#39;将(/ ParameterValues / ParameterValue / Name / Value / text())[1]的值替换为&#34; D.1234@EEEER.COM.AU" &#39)

  2. 如果我更改字符串以更新名称节点,则更新为&#34; D.1234@EEEER.COM.AU"?

    1。<Name>TO</Name>

    设置@ input.modify(&#39;将(/ ParameterValues / ParameterValue / Name / text())[1]的值替换为&#34; D.1234@EEEER.COM.AU"&# 39)

    示例结果

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

2 个答案:

答案 0 :(得分:1)

你想要的只是更新...试试这个

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

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

我希望我能帮忙......我认为项目上的数组值是错误......

答案 1 :(得分:0)

您的更新语句中指定了额外的Name节点。

请尝试使用此替换第一个ParameterValue节点的值。

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

如果您想确保只替换ParameterValue Name TO ParameterValue的{​​{1}}值,则应在replace value of (/ParameterValues/ParameterValue[Name = "TO"]/Value/text())[1] with "D.1234@EEEER.COM.AU"') 节点上使用谓词。

{{1}}