3

ノードに値がある場合にのみ、顧客のオプションを出力したいと考えています。情報にアクセスして印刷することはできますが、while ループにより、各アカウントの情報が印刷されます。ヘルプやヒントをいただければ幸いです。

xml にアクセスするコードは次のとおりです。

XPathNodeIterator ItemOptionsIter;
String ItemsearchStringOptions = "Order/Items/Item/CustomerOptions";
ItemOptionsIter = nav.Select(ItemsearchStringOptions);

if (ItemIter.Current.SelectSingleNode("CustomerOptions") != null)
{
    while (ItemOptionsIter.MoveNext())
    {
        XPathNodeIterator ItemOptions = ItemOptionsIter.Current.SelectChildren(XPathNodeType.Element);
        if (ItemOptions.Current.HasChildren)
        {
            txtItemInfo.Text = txtItemInfo.Text + "Size: " + ItemOptions.Current.SelectSingleNode("Size") + Environment.NewLine;
            txtItemInfo.Text = txtItemInfo.Text + "Color: " + ItemOptions.Current.SelectSingleNode("Color") + Environment.NewLine;
            txtItemInfo.Text = txtItemInfo.Text + "-------------------------------------------------" + Environment.NewLine;
        }
    }
}

xml ファイルは次のとおりです。

<Item>
    <PartNo>JETSWEATER</PartNo>
    <Description>N.Y. Jets Sweatshirt</Description>
    <UnitPrice>10.50</UnitPrice>
    <Quantity>2</Quantity>
    <TotalCost>21.00</TotalCost>
    <CustomerOptions>
        <Size>M</Size>
        <Color>Green</Color>
    </CustomerOptions>
</Item>
<Item>
    <PartNo>JETSSWEATER</PartNo>
    <Description>N.Y. Jets Sweatshirt</Description>
    <UnitPrice>7.50</UnitPrice>
    <Quantity>3</Quantity>
    <TotalCost>22.50</TotalCost>
    <CustomerOptions>
        <Size>S</Size>
        <Color>White</Color>
    </CustomerOptions>
</Item>
<Item>
    <PartNo>JETSFLAG</PartNo>
    <Description>N.Y. Jets Flag for display</Description>
    <UnitPrice>5.00</UnitPrice>
    <Quantity>1</Quantity>
    <TotalCost>5.00</TotalCost>
    <CustomerOptions/>
</Item>

最後に、私の出力のサンプルを次に示します。

部品番号: ジェットセーター
説明: NY ジェッツ スウェットシャツ
単価: 10.50
数量: 2
合計費用: 21.00
--------------------------------------------------
サイズ: M
色: 緑
--------------------------------------------------
サイズ: S
色: 白
--------------------------------------------------
品番:ジェットセーター
説明: NY ジェッツ スウェットシャツ
単価: 7.50
数量: 3
総コスト: 22.50
--------------------------------------------------
サイズ: M
色: 緑
--------------------------------------------------
サイズ: S
色: 白
--------------------------------------------------
部品番号: JETSFLAG
説明: 表示用の NY ジェッツ フラグ
単価: 5.00
数量: 1
総コスト: 5.00
--------------------------------------------------
サイズ: M
色: 緑
--------------------------------------------------
サイズ: S
色: 白
--------------------------------------------------
4

1 に答える 1

0

メインループを構築してItemノードを反復処理し、それらの値を出力してから、オプションを出力する場所で次のようにします。

XPathNodeIterator options = item.SelectNodes("CustomerOptions/*[. != '']");
if(options.Count != 0)
{
  XPathNavigator size = item.SelectSingleNode("CustomerOptions/Size[. != '']");
  if(size != null)
  {
    txtItemInfo.Text = txtItemInfo.Text + "Size: " + size.Value + Environment.NewLine;            
  }
  // Then do the same for color

  txtItemInfo.Text = txtItemInfo.Text + "-------------------------------------------------" + Environment.NewLine;
}
于 2013-01-09T03:02:37.587 に答える