1

すべてのデータをxmlファイルに保存しました。

<myself>
  <name>sara</name>
  <age>20</age>
  <gender>female</gender>
</myself>
<myself>
   <name>bob</name>
   <age>29</age>
   <gender>male</gender>
</myself>

また、ユーザーがタイプとキーワードに基づいてすべてのデータを検索できる検索ボックスがあります。このために、私は名前と性別の2つのタイプを入れています。

したがって、ユーザーが名前を選択してキーワードをsara入力すると、出力には彼女に関するすべてが表示されます。

出力の例は表示する必要があります

sara
20
female

この出力では、それぞれのテキストボックスで表示するようにしています。テキストボックスのタイトル名、年齢、性別が3つあります。

XmlDocument xml = new XmlDocument();            
        xml.Load("C:\\Users\\HDAdmin\\Documents\\Fatty\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
        XmlNodeList xnList = xml.SelectNodes("/myself");            
        foreach (XmlNode xn in xnList)
        {                
            string name = xn.InnerText;                
            nameBox.Text = nameBox.Text + " " + name;
            string age = xn.InnerText;                
            ageBox.Text = ageBox.Text + " " + age;
            string gender = xn.InnerText;                
            genderBox.Text = genderBox.Text + " " + gender;
        }

使ってみXmlNodeList xnList = xml.SelectNodes("/myself");ましたが、サラとボブのすべてが印刷されます。

だから私はxmlファイルを次のようにすることができると推測しています

<name>sara
   <gender>female
       <age>20</age>
   </gender>
</name>

しかし、これはうまくいかないと思います。これには方法がありますか?

これがデータを保存する方法です。

XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("C:\\Users\\HDAdmin\\Documents\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
                XmlElement contentElement = xmlDoc.CreateElement("myself");

                XmlElement nameEl = xmlDoc.CreateElement("name");
                XmlText xmlText = xmlDoc.CreateTextNode(berjaya[1]);
                nameEl.AppendChild(xmlText);
                contentElement.AppendChild(nameEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

                XmlElement ageEl = xmlDoc.CreateElement("age");
                ageEl.InnerText = berjaya[3];
                contentElement.AppendChild(ageEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

                XmlElement genEl = xmlDoc.CreateElement("gender");
                genEl.InnerText = berjaya[39];
                contentElement.AppendChild(genEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

++++++++++++====問題解決====++++++++++++++++++++

助けてくれてありがとう。これは解決されました。私は@horghによって与えられた答えを使用しています。

これが私が学んだことです。

1-私のxmlファイルには、メインタグが必要です。

2-ifループを使用してキーワードからデータを取得します。

他のデータを表示するには、次のようになります。

string name = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "name").FirstChild.Value;
            if (name == "sara")
            {
                nameBox.Text = nameBox.Text + " " + name;
                string age = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "age").FirstChild.Value;
                ageBox.Text = ageBox.Text + " " + age;
                string gender = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "gender").FirstChild.Value;
                genderBox.Text = genderBox.Text + " " + gender; 

            }

詳細については、以下をご覧ください。与えられたすべての助けにもう一度感謝します。

4

4 に答える 4

1

最初は、xml にルート要素がないというエラーが発生したため、ルート タグを追加しました。

<main>
 <myself>
  <name>sara</name>
  <age>20</age>
  <gender>female</gender>
</myself>
<myself>
  <name>bob</name>
  <age>29</age>
  <gender>male</gender>
</myself>

要求された名前、つまり「sara」のチェックを追加しました。

if (name == "sara")

したがって、結果のコードは次のようになります。

        XmlDocument xml = new XmlDocument();
        xml.Load("1.xml");
        XmlNodeList xnList = xml.SelectNodes("/main/myself");
        foreach (XmlNode xn in xnList)
        {
            string name = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "name").FirstChild.Value;
            if (name == "sara")
            {
                nameBox.Text = nameBox.Text + " " + name;
                string age = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "age").FirstChild.Value;
                ageBox.Text = ageBox.Text + " " + age;
                string gender = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "gender").FirstChild.Value;
                genderBox.Text = genderBox.Text + " " + gender;                                        
            }
        }

出力は次のとおりです。

sara
20
female
于 2012-08-08T01:44:26.290 に答える
0

指定した XPath は、sara と bob の両方のデータを正しく返す「myself」というすべての要素を選択します。

SelectNodes 呼び出しで「//myself[name=sara]」を使用してみてください。name の値が sara である myself 要素のみを返す必要があります。

PS: 自分自身の要素の名前を Person などに変更することもお勧めします。:)

于 2012-08-08T01:48:09.880 に答える
0

どうですか

XmlDocument xml = new XmlDocument();            
xml.Load("YourFilePath");        
foreach(var xml in doc.Elements("rootelement").Elements("myself").Elements("name")) 
{
     //Do what you want.
}
于 2012-08-08T01:45:52.950 に答える