skip to Main Content

I need to modify the CompValue from "C02" to "C02,C03" . How to achieve this ?I have tried various ways to modify the XML content but so far could not find a solution.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("XML value");

XmlNode root = xmlDoc.DocumentElement;
XmlNode myNode = root.SelectSingleNode("descendant::CompValue");
myNode.Value = "blabla";

Also

root.SelectSingleNode("//CritGroup/Crit").InnerText = "NewValue";

This is my sample xml

<Search Name="Test1" ProjTypeID="107">
    <SearchType SearchTypeID="20246" />
    <FiscalYear Year="2022" />
    <CorpEnt CEID="367" CEName="Sample" />
    <CritGroup CritGroupID="1" CritGroupAndOr="AND">
        <Crit CritID="205" RelID="275" CompValue="C02" CompValueHuman="C02" AndOr="AND" TextBoxName="tbProjNum" /> 
        <Crit CritID="208" RelID="280" CompValue="11" CompValueHuman="Yes" AndOr="AND" TextBoxName="" />
    </CritGroup>
    <PageSize Size="200" />
</Search>

2

Answers


  1. You need to get the complete node and replace the attribute. Here is the example

        var xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xml);
    
        var critNode = xmlDoc.SelectSingleNode("//Crit[@CompValue='C02']");
    
        if (critNode != null)
        {
            var compValueAttr = critNode.Attributes["CompValue"];
            if (compValueAttr != null)
            {
                compValueAttr.Value = "C02,C03";
            }
        }
    
        var modifiedXml = xmlDoc.OuterXml;
        Console.WriteLine(modifiedXml);
    
    Login or Signup to reply.
  2. Please try the following solution.

    It is using LINQ to XML API that is available in the .Net Framework since 2007.

    c#

    void Main()
    {
        XDocument xdoc = XDocument.Parse(@"<Search Name='Test1' ProjTypeID='107'>
                <SearchType SearchTypeID='20246'/>
                <FiscalYear Year='2022'/>
                <CorpEnt CEID='367' CEName='Sample'/>
                <CritGroup CritGroupID='1' CritGroupAndOr='AND'>
                    <Crit CritID='205' RelID='275' CompValue='C02' CompValueHuman='C02'
                          AndOr='AND' TextBoxName='tbProjNum'/>
                    <Crit CritID='208' RelID='280' CompValue='11' CompValueHuman='Yes'
                          AndOr='AND' TextBoxName=''/>
                </CritGroup>
                <PageSize Size='200'/>
            </Search>");
    
        var Crits = xdoc.Descendants("Crit")
            .Where(x => x.Attribute("CompValue").Value == "C02");
        
        foreach (XElement Crit in Crits)
        {
            Crit.Attribute("CompValue").SetValue("C02,C03");
        }
    }
    

    Output XML

    <Search Name="Test1" ProjTypeID="107">
      <SearchType SearchTypeID="20246" />
      <FiscalYear Year="2022" />
      <CorpEnt CEID="367" CEName="Sample" />
      <CritGroup CritGroupID="1" CritGroupAndOr="AND">
        <Crit CritID="205" RelID="275" CompValue="C02,C03" CompValueHuman="C02" AndOr="AND" TextBoxName="tbProjNum" />
        <Crit CritID="208" RelID="280" CompValue="11" CompValueHuman="Yes" AndOr="AND" TextBoxName="" />
      </CritGroup>
      <PageSize Size="200" />
    </Search>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search