需要一种方便的方法来设置xml中的节点列表值,而不是循环

本文关键字:列表 节点 循环 xml 一种 方法 方便 设置 | 更新日期: 2023-09-27 18:00:08

我有下面的xml,我需要在每个ROW中设置WF_PROCESSID,而不需要在c#中循环和设置。你能请任何人提出解决方案吗?

<RESP_WF_MAP>
 <ROW>
  <PLAN_FOR_RESP>Mombasa</PLAN_FOR_RESP> 
  <WF_PROCESSID>-9999</WF_PROCESSID> 
  <WF_PROCESSNAME /> 
  <DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
  </ROW>
  <ROW>
  <PLAN_FOR_RESP>Mombasa-Changamwe Branch</PLAN_FOR_RESP> 
  <WF_PROCESSID>-9999</WF_PROCESSID> 
  <WF_PROCESSNAME /> 
  <DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
  </ROW>
  <ROW>
  <PLAN_FOR_RESP>Mombasa-Mombasa Branch</PLAN_FOR_RESP> 
  <WF_PROCESSID /> 
  <WF_PROCESSNAME /> 
  <DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
  </ROW>
</RESP_WF_MAP>

我想消除这个循环,需要一个方便的xml处理方法

for ( intIndex = 0 ; intIndex < intLength ; intIndex++ )
{
    xmlRowElement           = (XmlElement)xmlRowNodeList.Item(intIndex);
    strWorkFlowId           = DwXMLUtilBO.getElementTagValue(xmlRowElement,"WF_PROCESSID");  // Customized static method to acquire the element value
    if(strWorkFlowId.Trim().Equals(""))
    {
       DwXMLUtilBO.setElementTagValue(xmlRowElement,"WF_PROCESSID" ,strWfId); // Customized static method to set the element value
    }
}

需要一种方便的方法来设置xml中的节点列表值,而不是循环

LINQ to XML:

foreach (var rowElement in XDocument.Load("yourXml").Descendants("ROW"))
{
    var idElement = rowElement.Element("WF_PROCESSID");
    if (string.IsNullOrWhiteSpace(idElement.Value))
    {
        idElement.Value = strWfId;
    }
}

尝试使用XmlDocument类而不是自定义类,类似于以下内容:

            var xml = @"
<RESP_WF_MAP>
<ROW>
<PLAN_FOR_RESP>Mombasa</PLAN_FOR_RESP> 
<WF_PROCESSID>-9999</WF_PROCESSID> 
<WF_PROCESSNAME /> 
<DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
</ROW>
<ROW>
<PLAN_FOR_RESP>Mombasa-Changamwe Branch</PLAN_FOR_RESP> 
<WF_PROCESSID>-9999</WF_PROCESSID> 
<WF_PROCESSNAME /> 
<DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
</ROW>
<ROW>
<PLAN_FOR_RESP>Mombasa-Mombasa Branch</PLAN_FOR_RESP> 
<WF_PROCESSID /> 
<WF_PROCESSNAME /> 
<DIRECT_MAP_YN>N</DIRECT_MAP_YN> 
</ROW>
</RESP_WF_MAP>";
        var doc = new XmlDocument();
        doc.LoadXml(xml);
        var list = doc.GetElementsByTagName("WF_PROCESSID");
        foreach (XmlNode node in list) 
        {
            node.InnerText = "your new value";
        }
        Console.Write(doc.InnerXml);
        Console.ReadKey();