2012-02-13 2 views
1

あなたが何をしていても、あなたの人生はうまくやっていますか? 大きな質問があります。まあ、それは私にとって大きな仕事です。私はgoogleといくつかのチュートリアルのフリストに従いましたが、最終的に私はstackoverflowersからの助けが必要であることを実感しました。XML文書を読み込み、ユーザーが選択したデータを照会する方法

私は以下のような1つの大きなxmlファイルを持っています。データが既に存在するので、私はその構造を制御できません。

<?xml version="1.0" encoding="utf-8" ?> 
    <root> 
     <Category Cat="A"> 
     <SubLevel Name="Sub1"> 
      <option name="a" /> 
      <option name="b" />  
     </SubLevel> 
     <SubLevel Name="Sub2"> 
      <option name="a" /> 
      <option name="b" />  
     </SubLevel>  
     </Category> 
     <Category Cat="B"> 
     <SubLevel Name="Sub1"> 
      <option name="a" /> 
      <option name="b" />  
     </SubLevel> 
     <SubLevel Name="Sub2"> 
      <option name="a" /> 
      <option name="b" />  
     </SubLevel> 
     </Category> 
    </root> 

私は(オプションなどのために。 "A")のaspxドロップダウンリストを持つページ(猫例えば "A" の場合)、RadioButtonListの(サブレベルなどのために。 "Sub1を")およびCheckBoxListのを持っています。

ユーザがドロップダウンリストからカテゴリAを選択した場合、ラジオボタンリストには対応するデータ(例:Sub1、Sub2)が入力されます。ユーザーがradiobuttonlistからSub1を選択すると、チェックボックスリストにオプションデータ(たとえば "a、b")が入力されます。

私はインターフェイスを持っていますが、コードはまだありません。 xmlをXMLDocumentまたはDatasetにロードすることはできますが、データの入力/フィルタリングとクエリの続行方法はわかりません。 vb.netのコードが必要です。 XMLDocument/Datasetに対する優先度はありません。私は何でも使える。だから私はこれをどのように達成できますか?

あなたのご協力にはほど遠いです。 (PS。私が持っている部分コードを書き留めておらず、柔軟にしたいと思っています)

答えて

2

私はLINQ to XMLを使います。 XMLがハードコードされていて、使用しているフォームにコンボボックスが1つしかないと仮定しましょう。したがって、このコード:

Imports Systeml.Linq, System.Xml.Linq 

Public Class Form1 
Dim myxml As XDocument 
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    myxml = <?xml version="1.0" encoding="utf-8"?> 
      <root> 
       <Category Cat="A"> 
        <SubLevel Name="Sub1"> 
         <option name="a"/> 
         <option name="b"/> 
        </SubLevel> 
        <SubLevel Name="Sub2"> 
         <option name="a"/> 
         <option name="b"/> 
        </SubLevel> 
       </Category> 
       <Category Cat="B"> 
        <SubLevel Name="Sub1"> 
         <option name="a"/> 
         <option name="b"/> 
        </SubLevel> 
        <SubLevel Name="Sub2"> 
         <option name="a"/> 
         <option name="b"/> 
        </SubLevel> 
       </Category> 
      </root> 
    Dim query = From node In myxml...<Category> 
       Order By [email protected] 
       Select New With {.Category = [email protected]()} 

    With ComboBox1 
     .DataSource = query.ToArray() 
     .DisplayMember = "Category" 
     .ValueMember = "Category" 
    End With 

End Sub 

は、最初のレベルでコンボボックスを入力します。さて、コンボボックスのClickイベントに、あなたはその後、For Eachステートメント使用してサブレベルの名前を繰り返すことができ、そこから

Dim q2= From node2 In myxml...<SubLevel> 
      Where [email protected] = ComboBox1.Text 
      Order By [email protected] 
      Select New With {.Name = [email protected]()} 

ようなクエリを必要とする、との名前でコントロールをタギング(動的にRadioButtonコントロールをロードサブレベル)。チェックボックスについても同様です。 XDocument.Load()を使用してmyxml変数をロードすることができます。

希望すると便利です。 VBのXML処理は、C#を決定的に嫌ういくつかの分野の1つです。そのため、扱うXMLがたくさんある場合は、VB.NETに固執します。

+0

こんにちはクライド、ありがとうございます。実際これはコードの本当に良い例です。私は、2番目のクエリで、選択したSubLevelの利用可能なオプションを表示する必要がある、私はあなたの例に従おうとしましたが、私はそれを実行できません。私は同様のクエリを書いたが、それは1つ以上のサブレベルのオプションを選択している。例えば。私は、Cat AのSub1のためにa、bを選択したかったが、a、b、a、bを選択した。それはCat BのSub1のためにも選択する。私。ありがとうございました。 – lawphotog

+0

** node2を** node2 **に置き換えてみてください(私のタイプミス!) 3番目のクエリについては、試してみました dim3 = myxmlのnode3から...

+0

ありがとうございましたクライド、私は今この仕事をしました..ありがとう.. – lawphotog

関連する問題