webForumDet fria alternativet

Läsa från ett XML-dokument

.NET

18 svar · 673 visningar · startad av kristoffer

Medlem sedan juni 20001 257 inlägg
Frågan#1

Snabbfråga:

Jag har en xml-fil med följande struktur:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table>
	<name>AboutRightTop</name>
	<value>Nyheter</value>
	<comment>Rubriken längst upp</comment>
  </Table>
  <Table>
	<name>Footer</name>
	<value>Copyright 2002 bla bla</value>
	<comment>Footer message</comment>
  </Table>
</NewDataSet>

Jag vill hämta texten innanför <value></value> på den rad där texten innanför <name></name> är lika med Footer. Hur gör jag? Jag har aldrig gjort någoting där man läser från ett xml-dokument, så jag är helt grön.

Medlem sedan juni 20001 257 inlägg
#2

Öh, skulle inte det vara lätt? NETwork?

Medlem sedan maj 2001329 inlägg
#3

I QuickStarten finns massa exempel som bla tar upp dit.

http://samples.gotdotnet.com/quickstart/

Skulle tro att det du söker finns på -Common Tasks- bläddra sen ner lite så hittar du en massa exempel på hur man hanterar XML-filer.

Snabb länk dit :)

http://samples.gotdotnet.com/quickstart/howto/doc/Xml/ReadXMLFile.aspx

Lycka till..

Medlem sedan juni 20001 257 inlägg
#4

Tackar

Medlem sedan juni 20011 732 inlägg
#5

Öh, skulle inte det vara lätt? NETwork?

Haha, sorry... :) Kolla länken ovan som sagt. Huruvida det är lätt beror väl på vem du frågar (är inte speciellt duktig på xml själv) men det är en teknik som kommer att bli allt vanligare så det är definitivt inte fel att lära sig XML.

En av grundpelarna i hela .net-filosofin är ju XML. Exempelvis dina dataset etc byggs ju upp med XML även om du inte behöver tänka på det...

Medlem sedan juni 20001 257 inlägg
#6

Ok. Det verkar som man måste stega sig igenom hela xml-dokumentet tills man hittar den raden man söker? Om det hade varit en databas hade sql-satsen sett ut så här:

SELECT value FROM mytable WHERE name = 'Footer'

Något motsvarande går inte att göra i XML?

Medlem sedan dec. 19995 874 inlägg
#7

Detta kanske fungerar?

for each objNode in oXML.documentElement.selectNodes("Table")
	with objNode
		if (.selectSingleNode("name").Text = "Footer") then
			response.write selectSingleNode("value").Text
		end if
	end with
next
Medlem sedan maj 2001329 inlägg
#8

Om du vill ha något motsvarande till SQL får du ta dig en titt på XPath.

http://develop/quickstart/howto/doc/Xml/QueryXmlDocumentXPath.aspx

Jag vet inte exakt hur det fungerar har alltid tykt att det är lättare att loopa igenom alla noderna än att sätta mig in i en helt ny teknik, men ta en titt på att.

Medlem sedan juni 20001 257 inlägg
#9

Brimba: Hm, vad är objNode för objekt egentligen?

Medlem sedan dec. 19995 874 inlägg
#10

Det är bara ett namn, fungerar det?

Medlem sedan juni 20001 257 inlägg
#11

Oj, jag menar förstås, vad är oXML för objekt?

Medlem sedan maj 2001329 inlägg
#12

Det är bara ett namn? ;)

Medlem sedan juni 20001 257 inlägg
#13

oXML.documentElement

bara ett namn?

Medlem sedan maj 2001329 inlägg
#14

Dummar mig bara. Det borde vara ett XmlDocument.

Medlem sedan juni 20001 257 inlägg
#15

Ok. Jag försöker här med XPath men får inte till XPath Expressionen. Hur skall det vara egentligen? Så här?

"child::Table[@value=\"Footer\"]"

http://www.w3.org/TR/xpath

Medlem sedan dec. 19995 874 inlägg
#16

oXML är ett DOM-Dokument, såhär gör du.. (förutsatt att du kör msxml v4)

    Dim oXML As MSXML2.DOMDocument40
    Set oXML = New MSXML2.DOMDocument40
Medlem sedan mars 20007 896 inlägg
#17

oXML är objektet, troligtvis en instans av IXMLDOMDocument. documentElement är ett fält i klassen DOMDocument ( Eller kanske en metod? ) som innehåller ( Returnerar, om det var en metod ) rotelementet av typen IXMLDOMElement eller liknande.

Medlem sedan juni 20001 257 inlägg
#18

Nja, nu kör jag med det andra alternativet, XPath. Någon som vet hur jag får till uttrycket?

Medlem sedan juni 20001 257 inlägg
#19

XPath var inte det lättaste. Jag gjorde som Brimba sade istället, så här ser det ut i c#:

XmlDocument xd = new XmlDocument();
xd.Load(Server.MapPath("myXmlFile.xml"));
foreach (XmlElement xe in xd.SelectNodes("//Table"))
{
	if (xe.SelectSingleNode("name").InnerText == "Footer")
	            strValue = xe.SelectSingleNode("value").InnerText;
}
262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)