Обновление XML с повторяющимися дочерними узлами - PullRequest
1 голос
/ 02 октября 2019

У меня есть XML в следующем виде:

  <?xml version="1.0" encoding="utf-8"?>
  <Report ReportType="Time_Data">
  <Parameters>
   <Parameter>
        <Name>P_400Meter</Name>
        <Caption>400 Meter race:</Caption>
        <Categories>
            <Category>Race</Category>
        </Categories>
        <Values>
            <Value>3</Value>
            <Value>2</Value>
            <Value>3</Value>
            <Value>4</Value>
        </Values>
        <Color />
        <Range> <= 3</Range>
        </Status>
    </Parameter>
    </Parameters>
  </Report>

Я обновил вышеупомянутый xml следующим кодом:

foreach (XmlNode xn in xnl) 
{
  tmpStrData = "";
  CatStr = "";
  foreach (XmlNode xn_node in xn.ChildNodes)
  {
   if (xn_node.Name == "Categories")
    {
     foreach (XmlNode xn_CatNode in xn_node.ChildNodes) 
      {
       CatStr = xn_CatNode.InnerText;
      }
     }
    else if (xn_node.Name == "Values")
     {
      foreach (XmlNode xn_ValNode in xn_node.ChildNodes)
       {
        tmpStrData = tmpStrData + "<" + xn_ValNode.Name + ">" + xn_node.InnerText.Replace("<", "&lt;").Replace(">","&gt;") + "</" + xn_ValNode.Name + ">";
       }
     }
    else
     {
      tmpStrData = tmpStrData + "<" + xn_node.Name + ">" + xn_node.InnerText + "</" +
      xn_node.Name + ">";
     }            
}
MainParameters = MainParameters + "<" + CatStr + ">" + tmpStrData + "</" + CatStr + ">";  }           

И теперь обновленный xml выглядит следующим образом;

<?xml version="1.0" encoding="utf-8"?>
  <Report ReportType="Time_Data">
  <Parameters>
 <Race>
  <Name>P_400Meter</Name>
  <Caption>400 Meter race:</Caption>
  <Value>3</Value>
  <Value>2</Value>
  <Value>3</Value>
  <Value>4</Value>
 </Race>
 </Parameters></Report>

Теперь мне нужно отредактировать xml так, чтобы мне не нужно, чтобы узел значения был одинаковым во всей строке, я хочу, чтобы он был похож на

  <Value1>3</Value1>
  <Value2>2</Value2>
  <Value3>3</Value3>
  <Value4>4</Value4>

Я застрял в этом. Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я попробовал это, и у меня это сработало.

byte ValID = 0;
foreach (XmlNode xn_ValNode in xn_node.ChildNodes)//get the main Value 
{
  if (ValID==0)
 tmpStrData = tmpStrData + "<" + xn_ValNode.Name + ">" + tmpValueData + "</" + xn_ValNode.Name + ">";
  else
 tmpStrData = tmpStrData + "<" + xn_ValNode.Name + ValID.ToString() +  ">" + tmpValueData + "</" + xn_ValNode.Name + ValID.ToString() + ">";
  ValID++;
}
0 голосов
/ 18 октября 2019

@ Sreeja, код, возможно, еще не оптимизирован наилучшим образом, приведенный ниже код достигает вышеуказанной цели, как показано ниже:

    var doc = XDocument.Load(xml); //load your updated xml 
    int number = 1;
    foreach (var element in doc.Descendants())
    {
        if (element.Name.LocalName.StartsWith("Value"))
        {
            element.Name = element.Name+""+ number;
            number++; //increment by one
        }
    }

Дайте мне знать, если это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...