1
<main>
  <myself>
    <pid>1</pid>
    <name>abc</name>
  </myself>
  <myself>
    <pid>2</pid>
    <name>efg</name>
  </myself>
</main>

これは、simpan という名前の XML ファイルです。私は2つボタンを持っています。次と前。私がやりたいことは、ユーザーがボタンをクリックすると、すべての情報が TextBox に表示されることです。検索ノードは pid に基づきます。

次のボタンは pid の値を 1 つ追加し (pid=2 としましょう)、同じ値の pid=2 を持つノードを検索します。pid=2 の名前も表示されます。(表示名=abc)

前のボタンも同様で、pid の値を 1 減らします (pid=1)。

誰もこれを行う方法を知っていますか?

// - - - - - - -編集 - - - - - - - - -

LB のおかげで、彼のコードを使用しようとしています。しかし、私はエラーが発生しました。

ここに画像の説明を入力

コードの実装は正しいですか?

private void previousList_Click(object sender, EventArgs e)
    {
        pid = 14;

        XDocument xDoc = XDocument.Parse("C:\\Users\\HDAdmin\\Documents\\Fatty\\SliceEngine\\SliceEngine\\bin\\Debug\\simpan.xml");

        var name = xDoc.Descendants("myself")
                    .First(m => (int)m.Element("PatientID") == pid)
                    .Value;

        textETA.Text = name;
        ////////////////////


    }
4

6 に答える 6

2
int pid = 2;
XDocument xDoc = XDocument.Parse(xml); //Load

var name = xDoc.Descendants("myself")
            .First(m => (int)m.Element("pid") == pid)
            .Element("name")
            .Value;
于 2012-09-30T12:28:37.317 に答える
0
private void previousList_Click(object sender, EventArgs e)
{
    pid = 14;

    XDocument xDoc = XDocument.Load(@"C:\Users\HDAdmin\Documents\Fatty\SliceEngine\SliceEngine\bin\Debug\simpan.xml");

    var name = xDoc.Root
                   .Descendants("myself")
                   .FirstOrDefault(e => e.Element("pid")
                   .Value
                   .Equals(pid.ToString(CultureInfo.InvariantCulture)))
                   .Element("name")
                   .Value;

    textETA.Text = name;
}
于 2012-09-30T12:53:19.427 に答える
0
public class simpman
{

    private static XElement root = XElement.Load("Simpman.xml");

    public static string GetItem(int index)
    {
        XElement item =
        (from element in root.Elements("myself")
        where (int)element.Element("pid") == index
        select element.Element("name")).SingleOrDefault();

        return item != null ? item.Value : "Please check the Index";
    }
}

static を 1 に初期化し、(Next の場合) や(Prev の場合)のitemIndexようにさらに使用します。itemIndex++itemIndex--

于 2012-09-30T14:17:52.433 に答える
0

XmlDocument doc = new XmlDocument(); FileStream fs = new FileStream(rootXMLPath, FileMode.Open, FileAccess.Read); doc.Load(fs); XmlNode node = doc.DocumentElement;

nodeName = "/main/myself";

var child1 = node.SelectSingleNode(nodeName).ChildNodes[0].FirstChild.InnerXml; var child2 = node.SelectSingleNode(nodeName).ChildNodes[0].LastChild.InnerXml; var child3 = node.SelectSingleNode(nodeName).ChildNodes[1].FirstChild.InnerXml; var child4 = node.SelectSingleNode(nodeName).ChildNodes[1].LastChild.InnerXml;

于 2016-10-03T06:20:10.127 に答える
0

以下を使用してXPathすべてのタグを一覧表示し、簡単なコマンドMyselfを使用して必要なものを探すことができます。Linq

XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory + "file1.xml");
        var resNodes = xmlDoc.SelectNodes("//myself");
        XmlNode res = null;
        var val = textBox1.Text;

        var item = from XmlNode x in resNodes
                   select x;

        foreach (var nodP in item) {
            foreach (XmlNode nod in nodP.ChildNodes) {
                if (nod.InnerText == val) {
                    res = nodP;
                }
            }
        }

        if (res == null)
            // not found!
            ;
        else
            // show the result
            ;
于 2012-09-30T12:43:03.910 に答える
0

古風な言い方ですが、XPathを使用できます。たとえば、次のようになります。

string xml =
    @"<main>
        <myself>
            <pid>1</pid>
            <name>abc</name>
        </myself>
        <myself>
            <pid>2</pid>
            <name>efg</name>
        </myself>
      </main>";

using System.Xml;

....

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
// Replace "2" in the string below with the desired pid
XmlNode xmlNode = 
    xmlDocument.DocumentElement.SelectSingleNode("myself/name[../pid=2]");
// xmlNode contains the <name>efg</name> XmlElement. For example:
string name = xmlNode.Value;

複数のノードに一致する可能性がある場合 (たとえば<myself>、子要素<pid>が 2 に設定された複数の要素が存在する可能性がある場合)、代わりに次を使用します。

foreach(XmlNode xmlNode in 
    xmlDocument.DocumentElement.SelectNodes("myself/name[../pid=2]"))
{
    // xmlNode contains the matching <name> element
}

どちらの場合も、 Valueプロパティを使用してXmlNodeから値を抽出できます。

于 2012-09-30T12:44:13.927 に答える