我有如下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("<", "<").Replace(">",">") + "</" + 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>
我陷入了困境。请帮助我。
@@ 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
}
}
让我知道这是否适合您。
我尝试过,对我有用。
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++;
}