2

私はC#の初心者です。

大きなケースの簡単な例:

入力:

<?xml version="1.0" encoding="utf-8"?>
 <products>
  <product>
   <id>1</id>
   <name>John</name>
  </product>
  <product>
   <id>2</id>
   <name>Tom</name>
  </product>
  <product>
   <id>3</id>
   <name>Sam</name>
  </product>
 </products>
</xml>

出力(id = 1の場合):

<id>2</id>
<name>Tom</name>

私のパートコードはpsedocodeを試してみてください:

XDocument doc=XDocument.Parse(".............");

 var els= doc.Descendants("product");
 foreach(e in els){
     node=e.Element("id");
     if(2==node.Value){
     return e;
   }
 }

助けてください、

ありがとう

4

3 に答える 3

4

現在、xmlファイルは適切にフォーマットされていません</xml>。ファイルから終了タグを削除して有効にします。そしてここにクエリがあります:

int id = 1;
XDocument xdoc = XDocument.Load(path_to_xml);
var product = xdoc.Descendants("product")
                  .Where(p => (int)p.Element("id") == id)
                  .SingleOrDefault();

<product>このクエリは、要素全体を返すかnull、一致するものが見つからない場合に返します。

また、製品名で十分に選択できると思います(すでに製品IDを持っているため)。

var name = xdoc.Descendants("product")
               .Where(p => (int)p.Element("id") == id)
               .Select(p => (string)p.Element("name"))
               .SingleOrDefault();

Tomの返品id = 2

于 2012-11-13T18:56:42.137 に答える
1

XPathを探している可能性があります。

root.XPathSelectElements(@"//products/product/id[text()='2']")

コメントへの編集:名前を直接取得する://products/product/id[text()='2']/../name

完全な例を見る

using System.Xml.Linq;
using System.Xml.XPath;

public class Program
{
    public static void Main(string[] args)
    {
        var doc = XDocument.Parse(XML);
        foreach(var n in doc.Root.XPathSelectElements(
                 @"//products/product/id[text()='2']"))
        {
            System.Console.WriteLine("Not that hard: '{0}'", n.Parent.Element("name").Value);
        }

        // Direct query for name:
        foreach(var n in doc.Root.XPathSelectElements(
                 @"//products/product/id[text()='2']/../name"))
        {
            System.Console.WriteLine("Directly: '{0}'", n.Value);
        }
    }

    private const string XML = 
    @"<?xml version=""1.0"" encoding=""utf-8""?>
        <products>
            <product>
                <id>1</id>
                <name>John</name>
            </product>
            <product>
                <id>2</id>
                <name>Tom</name>
            </product>
            <product>
                <id>3</id>
                <name>Sam</name>
            </product>
        </products>";
}

印刷:

Not that hard: 'Tom'
Directly: 'Tom'
于 2012-11-13T19:01:48.200 に答える
1

productこれは(あなたの質問のように)ではなく(あなたの質問のように)を返しますid

var product = doc.XPathSelectElement("//product[id and id[text() = '1']]");
于 2012-11-13T19:04:29.230 に答える