Avatar billede EveryMA Mester
04. december 2019 - 19:14 Der er 8 kommentarer og
1 løsning

ASP og XML: Attribute

Hej.

Jeg har læst mig frem til, at det rigtige ordvalg er attribute i denne sammenhæng. Jeg har en XML fil hvor jeg skal hive data ud fra gennem ASP. Det er klaret.

Der opstår komplikationer når jeg skal dykkere dybere ind i xml filen som forklaret her:

<sider>
  <side id="1">
    <navn>Side 1</navn
    <by>København</by>
<indhold>
<el navn="el">
  <value>25</value>
</el>
<el navn="ve">
  <value>30</value>
</el>
</indhold>
</side>
</sider>

Jeg kan få alle data ud, undtagen "el". Hvordan peger jeg på side > indhold > el > NAVN og får VALUE skrevet ud?
Avatar billede EveryMA Mester
04. december 2019 - 19:17 #1
Glemte at tilføje hvad jeg allerede har (som virker):

Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")   
objXMLDoc.async = False   
objXMLDoc.load Server.MapPath("xml.xml")


Set NodeList = objXMLDoc.getElementsByTagName("product")

For i = 0 to NodeList.length -1

  Set navn = objXMLDoc.getElementsByTagName("navn")(i)


med dette får jeg outputtet København hvilket er rigtigt. Men jeg kan ikke få den til at pege helt ned til den bestemte value
Avatar billede arne_v Ekspert
04. december 2019 - 20:32 #2
Utestet:

Set sider = doc.SelectNodes("//side")
For Each side in sider
    by = side.SelectSingleNode("navn/text()").NodeValue
    Set els = side.SelectNodes("el")
    For Each el in els
        navn = el.SelectSingleNode("@navn").NodeValue
        value = el.SelectSingleNode("value/text()").NodeValue
    Next
Next
Avatar billede EveryMA Mester
04. december 2019 - 22:34 #3
Hej Arne

Den giver blot en fejl 500

den fortæller ikke hvor den fejler
Avatar billede EveryMA Mester
04. december 2019 - 22:38 #4
den skal specifikt udskrive indholdet af value under side > indhold > el > el

Altså "el" i el skal være outputtet
Avatar billede arne_v Ekspert
05. december 2019 - 03:40 #5

<%
Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0") 
objXMLDoc.async = False 
objXMLDoc.load Server.MapPath("xml.xml")
Set sider = objXMLDoc.SelectNodes("//side")
For Each side in sider
    by = side.SelectSingleNode("navn/text()").NodeValue
    Response.Write "by=" & by & "<br>"
    Set els = side.SelectNodes("indhold/el")
    For Each el in els
        navn = el.SelectSingleNode("@navn").NodeValue
        value = el.SelectSingleNode("value/text()").NodeValue
        Response.Write "navn=" & navn & "<br>"
        Response.Write "value=" & value & "<br>"
    Next
    Set els = Nothing
Next
Set side = Nothing
Set ObjXMLDoc = Nothing
%>


udskriver:

by=København
navn=el
value=25
navn=ve
value=30

hos mig.

(efter at jeg har tilfoejet den manglende > i XML input)
Avatar billede EveryMA Mester
05. december 2019 - 17:47 #6
Tusind tak Arne.

Dog er der lige en men... den udskriver det perfekt som du beskriver.

Men jeg vil gerne kunne specificere hvilken 'el' den skal udskrive (el eller ve eller en tredje hvis jeg tilføjer det)

Lige nu udskriver den begge, som ligger i xml-filen. Og den tredje, hvis jeg tilføjer den

har prøvet i følgende linje uden held :

        navn = el.SelectSingleNode("@navn/el").NodeValue

for at den finder "navnet" med "el" og kun udskriver det
Avatar billede arne_v Ekspert
05. december 2019 - 19:07 #7
Set els = side.SelectNodes("indhold/el[@navn='el']")
Avatar billede EveryMA Mester
07. december 2019 - 19:23 #8
Der var den. Mange tak for hjælpen!
Avatar billede arne_v Ekspert
28. december 2019 - 18:05 #9
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester