webForumDet fria alternativet

Läsa från ett XML-dokument

18 svar · 673 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 257 inlägg
#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.

kristofferMedlem sedan juni 20001 257 inlägg
#2

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

GrynetMedlem 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..

kristofferMedlem sedan juni 20001 257 inlägg
#4

Tackar

NETworkMedlem 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...

kristofferMedlem 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?

BrimbaMedlem sedan dec. 19995 875 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
GrynetMedlem 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.

kristofferMedlem sedan juni 20001 257 inlägg
#9

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

BrimbaMedlem sedan dec. 19995 875 inlägg
#10

Det är bara ett namn, fungerar det?

kristofferMedlem sedan juni 20001 257 inlägg
#11

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

GrynetMedlem sedan maj 2001329 inlägg
#12

Det är bara ett namn? ;)

kristofferMedlem sedan juni 20001 257 inlägg
#13

oXML.documentElement

bara ett namn?

GrynetMedlem sedan maj 2001329 inlägg
#14

Dummar mig bara. Det borde vara ett XmlDocument.

kristofferMedlem 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

BrimbaMedlem sedan dec. 19995 875 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
SPiNMedlem 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.

kristofferMedlem 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?

kristofferMedlem 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;
}
407 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
403 ms — hämta tråd, inlägg och bilagor (db)