使用c#更新xml文件的属性值

时间:2014-07-29 04:47:54

标签: c# xml xpath xmldocument

我有一个类似以下的xml ..

我想在 PARAMCODE =“cd3”的最后 IP 元素中更新 PARAMETER 元素的 VALUE 属性 IP 元素的数量正在动态变化。

SelectSingleNode(String)仅选择与XPath表达式匹配的第一个XmlNode 我不知道用于选择最后一个IP元素的XPath表达式。请帮助我。

<?xml version="1.0"?>
<START>
  <TYPE CODE="1">
    <D1>
      <G1>100202</G1>
      <G2>01-10-2013 01:22:02</G2>      
    </D1>
    <D2>
      <INSTPARAM CODE="cd1" VALUE="212.94" >
      </INSTPARAM>
      <INSTPARAM CODE="cd2" VALUE="212.72" >
      </INSTPARAM>     
    </D2>
    <D4 INTERVALPERIOD="15">
      <DATA DATE="01-10-2013">
        <IP INTERVAL="1">
          <PARAMETER PARAMCODE="cd3" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER>          
        </IP>
        <IP INTERVAL="2">
           <PARAMETER PARAMCODE="cd3" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER> 
        </IP>
        <IP INTERVAL="3">
           <PARAMETER PARAMCODE="cd3" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER> 
        </IP>
        <IP INTERVAL="4">
           <PARAMETER PARAMCODE="cd3" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER> 
        </IP>
        <IP INTERVAL="5">
           <PARAMETER PARAMCODE="cd3" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0">
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER> 
        </IP>
        <IP INTERVAL="6">
           <PARAMETER PARAMCODE="cd3" VALUE="0" > //need to update the value of VALUE  attribute of this element
          </PARAMETER>
          <PARAMETER PARAMCODE="cd4" VALUE="0" >
          </PARAMETER>
          <PARAMETER PARAMCODE="cd5" VALUE="0" >
          </PARAMETER> 
        </IP>
      </DATA>
    </D4>
  </TYPE>  
</START>

1 个答案:

答案 0 :(得分:3)

SelectSingleNode(string)不一定返回第一个<IP>元素,这取决于您使用的XPath。您可以尝试在XPath中简单地添加[last()]以获取最后匹配的元素,例如:

var ip = doc.SelectSingleNode("//IP[PARAMETER[@PARAMCODE='cd3']][last()]");
ip.FirstChild.Attributes["VALUE"].Value = "100";