-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

それぞれをループして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 に答える
1

これを試して

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