需要一种方便的方法来设置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
}
}
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();