-2

我有一个包含以下内容的 XML 文件:

<incometax>
  <slab>
    <lowerlimit>0</lowerlimit>
    <upperlimit>200000</upperlimit>
    <percentage>0</percentage>
  </slab>
  <slab>
    <lowerlimit>200000</lowerlimit>
    <upperlimit>500000</upperlimit>
    <percentage>10</percentage>
  </slab>
  <slab>
    <lowerlimit>500000</lowerlimit>
    <upperlimit>1000000</upperlimit>
    <percentage>20</percentage>
  </slab>
  <slab>
    <lowerlimit>1000000</lowerlimit>
    <upperlimit></upperlimit>
    <percentage>30</percentage>
  </slab>
</incometax>

用户必须输入薪水:

Console.WriteLine("Enter salary:");
int salary = int.Parse(Console.Readline());

根据工资,我们必须计算税收。

我写了一些这样的代码..

XmlDocument xml = new XmlDocument();
xml.Load("filepath");
XmlNodeList slabs = xml.SelectNodes("//slab");

我正在将所有节点放入平板中。如何获取单个子节点的值?

4

2 回答 2

1

试试这个

XmlNodeList slabs = xml.SelectNodes("//slab[lowerlimit > 1000 and upperlimit > 1000]");
于 2013-03-06T08:46:28.153 回答
1

您可以循环每个,slabs然后进一步查询子元素。然后你可以得到每个元素的值,然后对它们做任何你想做的事情。

像这样的东西:

XmlDocument xml = new XmlDocument();
xml.Load("filepath");
XmlNodeList slabs = xml.SelectNodes("//slab");

foreach(var slab in slabs)
{
    var nodeLowerLimit = slab.SelectSingleNode("lowerLimit");
    var nodeUpperLimit = slab.SelectSingleNode("upperLimit");
    var nodePercentageLimit = slab.SelectSingleNode("percentage");

    string lowerLimit = nodeLowerLimit.Value;
    string upperLimit = nodeUpperLimit.Value;
    string percentage= nodePercentageLimit.Value;

    //do something with these values
}

如果您想根据输入工资匹配百分比,那么您可以进行以下调整(当然@Killo 提出了一个可能更好的替代方案 - 我之前没有使用过,但无法确认):

string percentageValue = "0";//just a default
foreach(var slab in slabs)
{
    var nodeLowerLimit = slab.SelectSingleNode("lowerLimit");
    var nodeUpperLimit = slab.SelectSingleNode("upperLimit");
    var nodePercentageLimit = slab.SelectSingleNode("percentage");

    string lowerLimit = nodeLowerLimit.Value;
    string upperLimit = nodeUpperLimit.Value;
    string percentage= nodePercentageLimit.Value;

    //check for empty strings as meaning "no limit", and check sal is within range
    if((string.IsNullOrEmpty(lowerLimit) || int.Parse(lowerLimit) <= sal) &&
       (string.IsNullOrEmpty(upperLimit) || int.Parse(upperLimit) >= sal))
    {
        percentageValue = percentage;
    }
}
//here you can convert the percentageValue to an int if you need to

int注意:上面的代码在解析之前不检查值是否有效。如果您确定您的 XML 结构,那么您不会发现问题。但是,我建议进一步开发代码并使用int.TryParse()进行验证。但我会让你玩一下;-)

于 2013-03-06T08:53:46.733 回答