webForumDet fria alternativet

Asp å XML

7 svar · 478 visningar · startad av EchO

EchOMedlem sedan aug. 2001112 inlägg
#1

Hoj!

Har ett litet problem med att hämta ut ett värde ur en xml fil..

när xml filen ser ut så här

<PostDetail>
<PostDate>
2002-01-14
</PostDate>
<EndDate>
2002-01-31
</EndDate>
<PostStamp>
2002-09-18 13:55:33
</PostStamp>
</PostDetail>

kan jag ju hämta ut värdet postdate på följande sätt:

PostDate = objJobNode.selectSingleNode("PostDetail/PostDate").nodeTypedValue

men hur gör jag för att hämta ut värden när xml filen ser ut så här? Hur får jag tex ut datumet?

<attribute attributeid="A8F84E17-7ABB-4234-8C55-E7E8B0CF43AA" name="InDatum" internalname="InDateJ" valuetypeinternalname="TextValue" valuetypename="Text" decimalvalue="0.00000" textvalue="2002-09-10 13:54:11" booleanvalue="false" haschanged="false" isrequired="false" maxlength="8000" datetimevalue="1900-01-01 00:00" unit="">
<choices />
</attribute>

tohaMedlem sedan dec. 1999707 inlägg
#2

datum = objJobNode.selectSingleNode("attribute/@datetimevalue").text

EchOMedlem sedan aug. 2001112 inlägg
#3

Fick det inte att fungera. Här är xmlfilen:

http://www.vexla.se/jonaslabb/mp.xml


Set objNodes = objXMLDOM.selectNodes("/ads/ad")

For Each objJobNode In objNodes
datum = objJobNode.selectSingleNode("attribute/@datetimevalue").text

Next

Vore tacksam för all hjälp!

UlfTMedlem sedan maj 20018 027 inlägg
#4

Du skulle kunna pröva:

Set objNodes = objXMLDOM.selectNodes("/ads/ad")

For Each objJobNode In objNodes
Set objAttribut = objJobNode.selectSingleNode("attribute")
[b]datum = objAttribut.getAttribute("datetimevalue")[/b]

Next
EchOMedlem sedan aug. 2001112 inlägg
#5

Nja.. fick det inte att fungera...
Fler förslag...

agneta_rungMedlem sedan juli 2002145 inlägg
#6

Hej!

Märkligt XML-dokument du fått att jobba med tycker jag! Att kalla noderna "attribute" känns verkligen förvirrande!!

Jag är ingen hävert på ASP, men om du är det kan du säkert översätta min Delphi-kod - annars får du tjoa till så reder vi nog ut det...

Nedanstående kod listar bara alla "attribute"-noders nodeName-attribut och textValue-attribut i en listkomponent i ett Delphi-formulär i min testapplikation. Vad du måste göra är förstås att gå igenom alla noder med tagName = "attribute" och leta efter exempelvis den som har attributet name = "JobbInDatum" och där hämta värdet i attributet textvalue.

procedure TForm1.Button1Click(Sender: TObject);
var
  doc: IXMLDOMDocument;
  node: IXMLDOMElement;
  l: IXMLDOMNodeList;
  i: integer;
begin
  doc := CoDOMDocument30.Create;
  doc.load('mp.xml');
  node := doc.documentElement;
  l := node.selectNodes('//attribute');
  for i := 0 to l.length - 1 do
    lst.items.Add(
      l.item[i].nodeName + ' ' +
      (l.item[i] as IXMLDOMElement).GetAttribute('name') + ' ' +
      (l.item[i] as IXMLDOMElement).GetAttribute('textvalue')
      )
end;
UlfTMedlem sedan maj 20018 027 inlägg
#7

På följande sätt fick jag ut alla datum ur första "attributes":

  Dim pDoc As DOMDocument
  Dim pNode As IXMLDOMNode
  Dim attNode As IXMLDOMNode
  Dim pAttr As IXMLDOMAttribute
  
  Set pDoc = New DOMDocument
  pDoc.Load ("c:\mp.xml")
  
  Set pNode = pDoc.selectSingleNode("//ads/ad/attributes")
  
  For Each attNode In pNode.childNodes
    If attNode.nodeName = "attribute" Then
      Set pAttr = attNode.Attributes.getNamedItem("datetimevalue")
      Text1.Text = Text1 & vbCrLf & pAttr.Value
    End If
  Next

Notera att du inom varje "ad"-element har ett "attributes"-element, vilket i sin tur innehåller ett antal "attribute"-element. Det är lätt att tappa bort sig i xml-trädet när noderna har så likartade namn.

EchOMedlem sedan aug. 2001112 inlägg
#8

Jag har följande kod:

Set pNode2 = objXMLDOM.selectSingleNode("/ads")
  
For Each attNode2 In pNode2.childNodes

Set pAttr5= attNode2.Attributes.getNamedItem("rownr")
nodid = pAttr5.Value

Response.Write attNode2.nodeName &": "&nodid&" <br>"

Set pNode = objXMLDOM.selectSingleNode("//ads/ad/attributes")
  
  For Each attNode In pNode.childNodes
 Response.Write attNode.nodeName &"<br>"
  ' If attNode2.nodeName = "attributes" Then
   'Response.Write "japp"
	'owe = attNode.Jobbtitel

     Set pAttr = attNode.Attributes.getNamedItem("datetimevalue")
     Set pAttr2 = attNode.Attributes.getNamedItem("textvalue")
     Set pAttr3 = attNode.Attributes.getNamedItem("name")
	 text = pAttr.Value
	 text2 = pAttr2.Value
	 text3 = pAttr3.Value
     text = text + "<br>" 
	 Response.Write text3&":<br>"
	 Response.Write text2 &"<br>"
	 
	  Response.Write owe &"<br><br>"
	 
  'Response.Write "<br>_______________________________________________<br>"
  next
Next
  

Response.Write "<br><br>antal noder: "&c1&"<br><br>"
end function

När jag loopar igenom alla noder i ads med attNode2 får jag rätt antal noder, id osv. Men hur gör jag sedan för att hämta ut alla attribut från resp nod? När jag gör följande i varje childnod
Set pNode = objXMLDOM.selectSingleNode("//ads/ad/attributes")

för att hämta ut attributen hämtar den bara ut information från den första noden hela tiden. Hur gör jag för att stega vidare i noden och hämta ut alla attribut för nod 2 osv.

@EchO

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)