Hej! T.ex. med hjäp av nåt i stil med följande: Hej! Jag har ändrat nu så att ArrayOfRace är rätt men den verka in komma in i foreach satset. den läser OK du menar så:-) OJ, trodde den var liiiiite mindre :) jag har kortat ner den nu. Följande funkar för mig: Min kod Det är ditt "default namespace" (starts taggen) som verkar krångla. Lägg till namespacet i ett NamespaceManager-objekt. Tack! Ange att bara första race elementet ska väljas i xpath-uttrycket:Loopa ut värden ur en xml fil
Jag har följande struktur på en XML fil
<code>
<ArrayofRace>
<Race>
<Starts>
<Start>
<Name>Jocke</Name>
<Pos>1</Pos>
</Start>
<Start>
<Name>tage</Name>
<Pos>2</Pos>
</Start>
<Start>
</Start>
</Starts>
</Race>
</ArrayofRace>
Hur can jag loopa igenom <Start> taggarna och hämta ut värdena där?
Jag skall väl använda foreeach men vet f--n inte hur jag skall göra
/Tyronne
</code>Sv: Loopa ut värden ur en xml fil
foreach (XmlElement start in doc.SelectNodes("/ArrayOfRace/Race/Starts/Start")) {
Console.WriteLine(start.SelectSingleNode("Name/text()").Value);
}
..dvs välj ut lämpliga noder med XPath och gör nåt fiffigt med dom (glöm inte felhanteringen...)
Sv:Loopa ut värden ur en xml fil
Vill sig inte riktig så jag skickar med min kod
<code>
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("DD.xml");
XmlNode xrootNode = xmlDoc.SelectSingleNode("ArrayOfRace");
// extrahera värden
//string namn = xrootNode.SelectSingleNode("post/namn").InnerText;
TreeNode DD = new TreeNode("Dagens Dubbel");
DD.Nodes.Add("DD 1");
DD.Nodes.Add("DD 2");
foreach (XmlElement start in xmlDoc.SelectNodes("ArrayOfRace/Race/Starts/Start"))
{
DD.Nodes[0].Nodes.Add(start.SelectSingleNode("horse/name").InnerText);
}
treeView1.Nodes.Add(DD);
</code>
Ser du något fel?
/TyronneSv:Loopa ut värden ur en xml fil
<code>
foreach (XmlElement start in xmlDoc.SelectNodes("ArrayOfRace/Race/Starts/Start"))
</code>
Men sedan hoppar den ut direkt
Förslag?
/tyronneSv:Loopa ut värden ur en xml fil
om här kommer den men den är stor
<code>
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfRace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Race>
<starts xmlns="java:se.atg.commonbean.racingcards">
<Start>
<horse>
<age>3</age>
<id>550480</id>
<name>Foretta</name>
<nationalityBorn>S</nationalityBorn>
<nationalityOwner>S</nationalityOwner>
<nationalityRaised>S</nationalityRaised>
<sex>
S
<domesticText xmlns="java:se.atg.commonbean.common">sto</domesticText>
<englishText xsi:nil="true" xmlns="java:se.atg.commonbean.common" />
</sex>
<swedenReg>true</swedenReg>
<thoroughbred>false</thoroughbred>
</horse>
</Start>
<Start>
<horse>
<age>3</age>
<id>550480</id>
<name>Foretta</name>
<nationalityBorn>S</nationalityBorn>
<nationalityOwner>S</nationalityOwner>
<nationalityRaised>S</nationalityRaised>
<sex>
S
<domesticText xmlns="java:se.atg.commonbean.common">sto</domesticText>
<englishText xsi:nil="true" xmlns="java:se.atg.commonbean.common" />
</sex>
<swedenReg>true</swedenReg>
<thoroughbred>false</thoroughbred>
</horse>
</Start>
</starts>
</Race>
</ArrayOfRace>
</code>
Sv: Loopa ut värden ur en xml fil
Kanske är bäst du klipper bort den, den tar juh upp 90% av pellesoft.se ;) :P
Du har alltså nåt liknande detta nu?
<code>
<ArrayofRace>
<Race>
<Starts>
<Start>
<Horse>
<Name>Jocke</Name>
<Pos>1</Pos>
</Horse>
</Start>
<Start>
<Horse>
<Name>tage</Name>
<Pos>2</Pos>
</Horse>
</Start>
</Starts>
</Race>
</ArrayofRace>
</code>Sv:Loopa ut värden ur en xml fil
I detta läget är jag bara intresserad av att kunna loopa ut /Horse/Name i varje Start eftersom dessa skall visas i min treeview
/TyronneSv: Loopa ut värden ur en xml fil
<b>XML</b>
<code>
<ArrayofRace>
<Race>
<Starts>
<Start>
<Horse>
<Name>Jocke</Name>
</Horse>
</Start>
<Start>
<Horse>
<Name>tage</Name>
</Horse>
</Start>
</Starts>
</Race>
</ArrayofRace>
</code>
<b>C#</b>
...
foreach (XmlElement start in doc.SelectNodes("ArrayofRace/Race/Starts/Start")) {
DD.Nodes[0].Nodes.Add(start.SelectSingleNode("Horse/Name").InnerText);
}
...
Se till att alla tagg-namn är rätt angivna.
Exvis är "Horse" inte samma som "horse".
/ Peter
Sv:Loopa ut värden ur en xml fil
<code>
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("DD.xml");
foreach (XmlElement start in xmlDoc.SelectNodes("ArrayOfRace/Race/starts/Start"))
{
DD.Nodes[0].Nodes.Add(start.SelectSingleNode("horse/name").InnerText);
}
</code>
XML struktur
<code>
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfRace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Race>
<starts xmlns="java:se.atg.commonbean.racingcards">
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
</starts>
</Race>
</ArrayOfRace>
</code>
den vill forfarande inte!
Gör samma sak. Den hoppar vidare när den läst in i floreeach satsen
/TyronneSv: Loopa ut värden ur en xml fil
Om du ger namnrymden ett prefix så fungerar det (xmlns:abc="java:se...." exvis).
Men detta förstör dock XML-strukturen en del om du inte ändrar överallt. :/
Någon annan som har nån idé?
/ PeterSv:Loopa ut värden ur en xml fil
XmlNamespaceManager man = new XmlNamespaceManager( new NameTable() );
man.AddNamespace( "atg", "java:se.atg.commonbean.racingcards" );
foreach ( XmlElement start in xmlDoc.SelectNodes( "ArrayOfRace/Race/atg:starts/atg:Start", man ) )
{
// Do something...
}
Sv: Loopa ut värden ur en xml fil
Nu fungerar det och jag har bara en fråga till
i XML file så är den uppbygg så här
<code>
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfRace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Race>
<starts xmlns="java:se.atg.commonbean.racingcards">
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
</starts>
</Race>
<Race>
<starts xmlns="java:se.atg.commonbean.racingcards">
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
<Start>
<horse>
<name>Foretta</name>
</horse>
</Start>
</starts>
</Race>
</ArrayOfRace>
</code>
hur får jag den att bara göra igenom första delen av <Race> och inte igenom båda två
I XML filen så finns startlistorna för Dagens Dubbel. Så inom första <Race> finns startlistan för DD1 så hur tar jag bara ut den?
<code>
XmlNamespaceManager man = new XmlNamespaceManager( new NameTable() );
man.AddNamespace( "atg", "java:se.atg.commonbean.racingcards" );
foreach (XmlElement start in xmlDoc.SelectNodes("ArrayOfRace/Race/atg:starts/atg:Start", man))
{
DD.Nodes[0].Nodes.Add(start.SelectSingleNode("atg:horse/atg:name",man).InnerText);
}
</code>
/TyronneSv:Loopa ut värden ur en xml fil
xmlDoc.SelectNodes("ArrayOfRace/Race[1]/atg:starts/atg:Start", man))