1

Linq to Xml を使用して xmldata をフィルタリングしようとしていますが、問題は XElement.Elements(Xname) メソッドを使用して要素を取得できないことですが、XElement.Desendents(Xname) メソッドを使用すると正常に動作しますが、すべての要素が表示されます。私はしたくない。私が望むのは、要素と属性の名前が2つのテキストボックスに渡されるすべての要素と属性を表示することです。

XML:

<?xml version="1.0" ?> 
<Summary AvailableRules="71000" SelectedRules="445" OmittedRules="6887">
  <BBCE AvailableRules="69" SelectedRules="4" OmittedRules="65">
    <SelectedRules>
      <Rule RuleID="jc_0201" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0211" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0221" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0231" Priority="Strongly Recommended" /> 
    </SelectedRules>
    <OmittedRules>
      <Rule RuleID="ar_0001" Priority="Mandatory" /> 
      <Rule RuleID="ar_0002" Priority="Mandatory" /> 
      <Rule RuleID="db_0143_a" Priority="Strongly Recommended" /> 
      <Rule RuleID="db_0143_b" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0311" Priority="Mandatory" /> 
      <Rule RuleID="jc_0321" Priority="Mandatory" /> 
      <Rule RuleID="jc_0331" Priority="Mandatory" /> 
      <Rule RuleID="jc_0341" Priority="Mandatory" /> 
      <Rule RuleID="jc_0011" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0021" Priority="Strongly Recommended" /> 
      <Rule RuleID="na_0004_a" Priority="Recommended" /> 
      <Rule RuleID="na_0004_b" Priority="Recommended" /> 
      <Rule RuleID="db_0043" Priority="Strongly Recommended" /> 
      <Rule RuleID="db_0042" Priority="Strongly Recommended" /> 
      <Rule RuleID="na_0005" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0081" Priority="Recommended" /> 
      <Rule RuleID="jm_0002" Priority="Mandatory" /> 
      <Rule RuleID="db_0142" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0061" Priority="Recommended" /> 
      <Rule RuleID="db_0146" Priority="Strongly Recommended" /> 
      <Rule RuleID="db_0140" Priority="Recommended" /> 
      <Rule RuleID="jm_0013" Priority="Strongly Recommended" /> 
      <Rule RuleID="db_0032" Priority="Strongly Recommended" /> 
      <Rule RuleID="db_0141" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0171" Priority="Strongly Recommended" /> 
      <Rule RuleID="jm_0010" Priority="Strongly Recommended" /> 
      <Rule RuleID="jc_0281" Priority="Strongly Recommended" /> 
      <Rule RuleID="na_0008" Priority="Recommended" /> 
      <Rule RuleID="na_0009" Priority="Strongly Recommended" /> 
    </OmittedRules>
  </BBCE>
</Summary>

C# コード:

var button = sender as Button;
var parent = button.Parent as FrameworkElement;

//(Textbox to take element`s name)
var textBox = parent.FindName("textbox1") as TextBox;

var textbl = parent.FindName("abc") as TextBlock;
var com = parent.FindName("cbox1") as ComboBox;

//(Textbox to take ATTRIBUTE`s name)  
var textBox1 = parent.FindName("textbox2") as TextBox;

XElement ele = XElement.Load(txtFileName.Text);

//working with Xelement.desendents it works fine
var fil = from item in ele.Elements(textbl.Text)
          select item.Element(textBox.Text).Attribute(textBox1.Text);

foreach (var f in fil)
{
    Label lb = new Label();
    lb.Content = f;
    canvas1.Children.Add(lb);
}

私が観察したのは、BBCE 要素のみを操作する場合は正常に動作しますが、属性 (Elements メソッド) を持つ Summary 要素を追加すると機能しないことです。

何か不足していますか?

4

1 に答える 1

0

Elements(name)メソッドはノードの子要素を返します。Descendants(name)メソッドは、ノードの子孫要素を返します。それは予想される動作です。

したがって、呼び出している場合、検索は要素ele.Elements(textbl.Text)の直接の子の間でのみ行われます。経由でeleファイルをロードする場合、要素はxmlのルート要素になります。つまり、あなたの場合の要素です。子が 1 人います。そのため、メソッドを使用して検索している場合にのみ見つけることができます。XElement ele = XElement.Loadele<Summary><BBCE><BBCE>Elements()

Descendants()<Summary>あなたの場合のメソッドは、ノード自体を除く、ドキュメント内の任意の要素を検索します。

于 2013-02-22T06:35:06.507 に答える