2016-05-17 66 views
0

我正在使用各种百分比值修改XML文件。在一个XML文件中有多个元素。我有一个特定元素的百分比,我需要将剩余的百分比分配给剩余的元素。以下是我存储在服务器中的示例XML文件。在xml标记的多个元素上平均分配百分比

<exam> 
    <name>Maths</name> 
    <percentage>100</percentage> 
</exam> 
<exam> 
    <name>Physics</name> 
    <percentage>70</percentage> 
</exam> 
<exam> 
    <name>Chemistry</name> 
    <percentage>70</percentage> 
</exam> 

我有一个特定主题的百分比值。例如,我有数学的百分比值,我用下面的代码对数学的百分比值进行了硬编码。

foreach (XElement xmltag1 in xmltag.Descendants(subsection)) 
{ 
    if (xmltag1.Element("name").Value.Equals("Maths")) 
    { 
     xmltag1.Element("percentage").Value = "75"; 
    } 
} 

现在我需要更新物理和化学的剩余主体的百分比值,而不是小数。所以我正在使用下面的逻辑。

int totalsections = subclasscount; 
// subclass count is a method which would return the total number of subclasses inside a particular xml tag. I have that method available with me 
int remainingallocatedpercentage = 25/totalsections; 
foreach (XElement xmltag1 in xmltag.Descendants(subsection)) 
{ 
    if ((remainingallocatedpercentage % 1) == 0) 
    { 
     if (!xmltag1.Element("name").Value.Equals("Maths")) 
     {              
      xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
     } 
    } 
    else 
    { 
    }   
} 

我不太清楚如何处理else路径。所以我需要逻辑来实现它。我想告诉你,我不知道还有什么其他学科价值可用(就像物理学,化学有多个学科是动态的而不是静态的),所以我需要在所有科目中平均分配剩余的百分比。

+0

问题是,你想在else子句中做什么? – Marco

+0

马可抱歉,我现在编辑了我的问题,现在您应该能够弄清楚我确实需要什么。 – stangada

+0

在else子句中,我想在整个数字中剩下的主题中平均分配百分比。对于数学我有75分配,所以我想分配22物理和化学23。 – stangada

回答

0

首先,这段代码不会工作,因为int remainingallocatedpercentage = 25/totalsections;将始终得到一个整数值。相反,你可以这样做:

var remainingallocatedpercentage = 25/(float)totalsections; 

应用之后,现在你有机会下降到你的代码的else条件。

然后您的实际问题开始。但必须有一个策略来处理这种情况。在你的else情况下,你可以用下面的方法去:

  1. 的浮点数的最低值只设置到其他类值。这是非常简单的:

    xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
    
  2. 设置本底值对所有这些除了最后一个,并设置剩余部分的最后一个。这是一个有点乏味:

    if(!xmltag1.Element("name").Value.Equals(xmltag.Descendants(subsection).LastOrDefault().Element("name").Value)) 
    { 
        xmltag1.Element("percentage").Value = remainingallocatedpercentage; 
    } 
    else 
    { 
        xmltag1.Element("percentage").Value = remainingallocatedpercentage + 1; 
    } 
    

我不知道哪种方法适合你,但因为你有一个整数约束,没有比这多少机会。