2 Stimmen

C# Wie extrahiere ich den kompletten Xml-Knotensatz?

<?xml version="1.0" encoding="ISO-8859-1"?>
 <bookstore>
  <book category="COOKING"> 
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>    
    <year>2005</year>
   <price>30.00</price>
  </book>

  <book category="CHILDREN">
   <title lang="en">Harry Potter</title>
   <author>J K. Rowling</author>
   <year>2005</year>
   <price>29.99</price>
  </book>

  <book category="WEB">
   <title lang="en">XQuery Kick Start</title>
   <author>James McGovern</author>
   <author>Per Bothner</author>
   <author>Kurt Cagle</author>
   <author>James Linn</author>
   <author>Vaidyanathan Nagarajan</author>
   <year>2003</year>
   <price>49.99</price>
  </book>

  <book category="WEB">
   <title lang="en">Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
   <price>39.95</price>
  </book>

</bookstore>

Gibt es eine Möglichkeit, mit XPath den kompletten ersten Knotensatz auszuwählen, zum Beispiel aus

 <book category="COOKING">  
  to 
 </book>, 

so dass dieses Stück XML zur späteren Verwendung gespeichert werden kann.

Bob.

3voto

Dan Tao Punkte 121990

Nehmen wir an, dieses XML wird in einer XmlDocument genannt. doc .

XmlElement docRoot = doc.DocumentElement;
XmlNode cookingNode = docRoot.SelectSingleNode("./book[@category='COOKING']");

Ich habe dies getestet und diese Zeile zur Überprüfung hinzugefügt:

Console.WriteLine(cookingNode.OuterXml);

Hier ist das Ergebnis:

<book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada
De Laurentiis</author><year>2005</year><price>30.00</price></book>

1voto

Matthew Whited Punkte 21770

Mit dieser Abfrage wird dieser Knoten ausgewählt. Versuchen Sie, eine Reihe von Knoten zu erhalten oder nur einen einzigen? Möglicherweise müssen Sie den Buchladenknoten selbst zurücksetzen, wenn Sie nur eine Teilmenge von Knoten benötigen.

/bookstore/book[@category='COOKING']

as XmlDocument ...

var x = new XmlDocument();
x.Load("XmlFile1.xml");
var ns = x.SelectSingleNode("/bookstore/book[@category='COOKING']");

var res = ns.OuterXml;

as XDocument ...

var x = XDocument.Load("XmlFile1.xml");

var root = new XElement("bookstore",
    from book in x.Element("bookstore").Elements("book")
    where book.Attribute("category").Value == "COOKING"
    select book
    );

wenn Sie nur den Buchknoten wollen, können Sie dies anstelle der obigen Root-Version tun

var book = x.Element("bookstore")
    .Elements("book")
    .Where(n => n.Attribute("category").Value == "COOKING")
    .First();

1voto

Gifted Punkte 31

Angenommen, ich möchte nur die Daten extrahieren, bei denen die XML-Datei wie folgt aussieht.

<book category="COOKING"> 
    <title lang="en">Everyday Italian</title>
    <author auth="up">Giada De Laurentiis</author>    
    <year>2005</year>
   <price>30.00</price>
  </book>

sollte das Endergebnis in der Listenansicht wie folgt aussehen

  lang       auth
  en          up

Ich habe wie folgt kodiert ..

XmlNodeList elemList = doc.GetElementsByTagName("book");
                    for (int j = 0; j < elemList.Count; j++)
                    {
                        if (elemList[j].Attributes["category"].Value == "COOKING")
                        {
                            XmlNodeList elemList1 = doc.GetElementsByTagName("author");
                            for (int i = 0; i < elemList1.Count; i++)
                            {
                                string attrVal = elemList1[i].Attributes["lang"].Value;
                                string attrVal1 = elemList1[i].Attributes["auth"].Value;

                                ListViewItem lvi = new ListViewItem();

                                    lvi.SubItems.Add(attrVal1);
                                    lvi.SubItems.Add(attrVal1);
                                }
                                listView1.Items.Add(lvi);
                            }
                        }
                    }

0voto

tsilb Punkte 7699

Ich schließe mich der Antwort von Matthew an:

XmlDocument xDoc = new XmlDocument();
// (Put code to populate xDoc here)
XmlNodeList xNode = xDoc.SelectNodes(@"/bookstore/book[@category='COOKING']");

xNode ist jetzt gleich Book vom Typ COOKING.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X