我有一个类似以下的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>
答案 0 :(得分:3)
SelectSingleNode(string)
不一定返回第一个<IP>
元素,这取决于您使用的XPath。您可以尝试在XPath中简单地添加[last()]
以获取最后匹配的元素,例如:
var ip = doc.SelectSingleNode("//IP[PARAMETER[@PARAMCODE='cd3']][last()]");
ip.FirstChild.Attributes["VALUE"].Value = "100";