Toon posts:

[XML] Attributen en nodes*

Pagina: 1
Acties:
  • 86 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik houd me laatste tijd wat bezig met XML..en loop tegen volgende probl. aan.
Ik heb een aantal tutorials afgewerkt die bijv. werken met de volgende sctructuur:

<News>
<Title>Hier nieuws title</Title>
<Genre>Worldnews<Genre>
<Body>Hier de tekst die het nieuwsbericht bevat</Body>
</News>

Maar nu heb ik gemerkt dat het ook op de volgende manier kan:

<News id="2603" >
<Title Name="Hier nieuws title"/>
<Genre Name="Worldnews"/>
<Body Message="Hier de tekst die het nieuwsbericht bevat"/>
</News>

Kan iemand mij vertellen wat het verschil is? En hoe je de laatste manier kan uitlezen?
Op de eerste manier kun je via XSL ( <xsl:value-of select="News/Title"/> ) het uitlezen etc..
Maar doe werkt dat dan op die tweedde manier?

* OOPs..titel van topic vergeten..en kan deze niet editen..sorry

[ Voor 17% gewijzigd door Verwijderd op 26-10-2005 13:37 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Opzich niet zo veel verschil. Het 1e is wat netter imho.

kijk maar eens op w3schools.com

Daar vind je ook info over.

Multimonitor is relax :P


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 22:07

Bosmonster

*zucht*

Attributen zijn bedoeld als extra beschrijvende waarden van een element, niet als content. Je moet de mogelijkheden dus gebruiken waar ze voor bedoeld zijn.


code:
1
2
3
4
5
6
7
8
<news>
   <item id="43">
       <title>Dit is een titel</title>
       <genre id="12">Genrenaam voor weergeven, in attribuut id naar genre tabel</genre>
       <body><![CDATA[blabla]]></body>
       <url target="_blank">http://www.domein.nl</url>
   </item>
</news>

[ Voor 57% gewijzigd door Bosmonster op 26-10-2005 13:42 ]


Verwijderd

Topicstarter
Bosmonster schreef op woensdag 26 oktober 2005 @ 13:40:
Attributen zijn bedoeld als extra beschrijvende waarden van een element, niet als content. Je moet de mogelijkheden dus gebruiken waar ze voor bedoeld zijn.


code:
1
2
3
4
5
6
7
<news>
   <item id="43">
       <title>Dit is een titel</title>
       <genre id="12">Genrenaam voor weergeven, in attribuut id naar genre tabel</genre>
       <body><![CDATA[blabla]]></body>
   </item>
</news>
Dit ben ik met je eens, maar iemand levert mij zo'n xml feed op de 2e manier aan zeg maar..dus vandaar.. Zelf zou ik het uiteraard op jouw manier doen.

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Volgens mij krijg je op de 2e manier, dus met die attributen ook nog het probleem dat je niet dingen als CDATA kunt gebruiken.

Verwijderd

Topicstarter
prototype schreef op woensdag 26 oktober 2005 @ 13:44:
Volgens mij krijg je op de 2e manier, dus met die attributen ook nog het probleem dat je niet dingen als CDATA kunt gebruiken.
hmzjah dat terzijde..maar het gaat me er eerst even om op welke manier ik die attributen uit kan lezen..

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:01

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op woensdag 26 oktober 2005 @ 13:35:
* OOPs..titel van topic vergeten..en kan deze niet editen..sorry
Maak even een TR aan en we passen de titel voor je aan ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 26-04 09:25

pjvandesande

GC.Collect(head);

Bijde structuren werken gewoon. Attributes zijn eigelijk gewoon wat syntax candy om niet een hele nieuwe Node te openen en de sluiten.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-04 17:29

Janoz

Moderator Devschuur®

!litemod

Dat ze beiden 'gewoon werken' impliceerd niet automatisch dat het 'enkel syntactische suiker' is. Er is wel degelijk een verschil tussen een node en een attribuut. Een behoorlijke tijd terug is hier al eens een flinke discussie over gevoerd.

[rml][ Discussie] Stelling: XML attributen zuigen![/rml]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb wel degelijk een onderscheid tussen attributen en nodes.
Een node heeft een naam (<mynode>) en een value (<mynode>myvalue</mynode>). Als ik iets wil vertellen over die node (of bijbehorende value) dan gebruik ik een attribuut (<mynode id="123">myvalue</mynode>).
Heb ik nodes die childdata kunnen bevatten, dan gebruik je dus nieuwe nodes (<mynode><somenode id="1">bla</somenode><somenode id="2">bla</somenode></mynode>).

Overigens zijn nodes met attributen prima met XPath / XSL te bereiken:

mynode/somenode[@id="123"]/anothernode of bijvoorbeeld mynode/somenode/@id om het attribuut als node te benaderen

[ Voor 69% gewijzigd door RobIII op 26-10-2005 14:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
RobIII schreef op woensdag 26 oktober 2005 @ 14:42:
Ik heb wel degelijk een onderscheid tussen attributen en nodes.
Een node heeft een naam (<mynode>) en een value (<mynode>myvalue</mynode>). Als ik iets wil vertellen over die node (of bijbehorende value) dan gebruik ik een attribuut (<mynode id="123">myvalue</mynode>).
Heb ik nodes die childdata kunnen bevatten, dan gebruik je dus nieuwe nodes (<mynode><somenode id="1">bla</somenode><somenode id="2">bla</somenode></mynode>).
...
Om even te stoken, maar niet te erg te stoken, maar gewoon netjes te stoken. Waarom gebruik je dat niet dit? :+

<mynode>
<id>123</id>
<name>myvalue</name>
</mynode>

Hoewel dit niet mijn voorkeur heeft :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-04 22:07

Bosmonster

*zucht*

Verwijderd schreef op woensdag 26 oktober 2005 @ 14:09:
[...]


hmzjah dat terzijde..maar het gaat me er eerst even om op welke manier ik die attributen uit kan lezen..
*kuch*

volgens mij wil die alleen weten hoe je ze uit moet lezen :+

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Graveheart schreef op woensdag 26 oktober 2005 @ 14:56:
Hoewel dit niet mijn voorkeur heeft :)
Dat kan inderdaad ook, maar vind ik dus niet mooi. Het kan overigens, als je beperkt wordt door XML-schema's en dat soort ongein wel eens handig zijn.
Bosmonster schreef op woensdag 26 oktober 2005 @ 14:59:
[...]
*kuch*

volgens mij wil die alleen weten hoe je ze uit moet lezen :+
[rml]RobIII in "[ XML] Attributen en nodes*"[/rml]

[ Voor 33% gewijzigd door RobIII op 26-10-2005 15:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Bosmonster schreef op woensdag 26 oktober 2005 @ 14:59:
[...]


*kuch*

volgens mij wil die alleen weten hoe je ze uit moet lezen :+
<xml:value-of select="@id" />

Een @ er voor zetten, dan heb je het attribute.

[ Voor 5% gewijzigd door Fles op 26-10-2005 18:03 ]


  • r0bert
  • Registratie: September 2001
  • Laatst online: 26-04 17:38
<xsl:value-of select="@attr" /> ;) // edit: idd zoals in edit^ + /> ipv >

Ik gebruik voor attributen altijd iets als. Wanneer de gemiddelde lengte van de waardes kleiner zijn dan de lengte van de afsluittag óf als de waarde uit 1 tekenreeks bestaat én geen childnodes kan bevatten, kan het wel in een attribuut gestopt worden. Anders mwaoh, neuj :9

[ Voor 15% gewijzigd door r0bert op 26-10-2005 16:39 ]


Verwijderd

Zowel in DOM Level 3 Core als in DOM Level 2 Core (3 is een superset van 2), geldt dat alles intern gerepresenteerd wordt als een Node. De API kent twee views; Inheritance en de Flattened view. Vendors mogen zelf bepalen welke ze implementeren, maar aangeraden wordt om beiden te ondersteunen (wat bijna alle implementaties doen).
De Inheritance benadering is de standaard benadering en die gaat er van uit dat alles in het document de Node interface implementeert.
In dit hele topic wordt het woord Node verkeerd gebruikt. Er is een Element interface die de Node interface implementeert en een Attr interface die ook de Node interface implementeert.

Ik persoonlijk zou in een Attr meta-data zetten die betrekking heeft op de Element Node anders een Text Node als child gebruiken.

Verwijderd

Topicstarter
Via phpfreakz website ben ik al een eind verder gekomen maar nu het volgende..

de bedoeling is dat ik bepaalde attributen van een element kan uitlezen via php.
Bijv. attribuut ID. Nu ben ik al zover dat ik deze uit kan lezen,maar dan leest php alle id's van alle elementen uit. Dus stel dat er meerdere elementen attribuut ID gebruikt..krijg ik ze allemaal te zien.

De volgende code heb ik inmiddels.

<?PHP
class xml_parser {

function startElement($parser, $tagname, $attributes) {

if (isset($attributes)) {

print '<br />';
}

// Voorbeeld om een attribute te gebruiken
if (isset($attributes['ID'])) {

print 'Een enkel attribute, ID : '.$attributes['ID'];
}


}


function endElement($parser, $tagname) {

// hier kun je wat doen zodra je een closing tag tegen komt.
}

// Collect information and put it in the variables
function characterData($parser, $data) {

// hier kun je met data spelen dat tussen de tags zit

}
}


$xml_file = 'http://www.website.nl/blabla/nieuws.xml';

// Create XML support and setup xml parser
$xp = xml_parser_create();
$xml_parser = new xml_parser();
xml_set_object($xp,&$xml_parser);

// Ignore whitespaces
xml_parser_set_option($xp, XML_OPTION_SKIP_WHITE, TRUE);

xml_set_element_handler($xp, "startElement", "endElement");
xml_set_character_data_handler($xp, "characterData");

// Open xml file
if ($fp = @fopen($xml_file,"r")) {
fflush($fp);

while ($data = fread($fp, 4096)) {

if( !(xml_parse($xp, trim($data), feof($fp)))) {

die('Fout bij het parsen. Controleer XML ofzo');
}

}

fclose($fp);
xml_parser_free($xp);
}
else {

// Error opening RSS file
die('Fout bij het openen van '. $xml_file);
}

?>

Maar nu laat ie alle id's over alle elementen zien.
Hoe kan ik nou aangeven dat ie uit een bepaald element de ID pakt en niet uit allemaal..?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

  1. Gebruik asjeblieft [code]-tags als je code post. Dit is niet te lezen.
  2. Ik heb het al vaker geroepen, maar ik doe het nog eens: PHPFreakz.nl zuigt dankzij hun achterhaalde content.
  3. Je hebt een probleem met PHP, niet met XML.
  4. We geven geen support op scripts van anderen.
  5. In de manual is hier meer dan genoeg over te vinden. Lees ook de user notes eens.
Al met al reden genoeg om hier een eind aan te breien. Probeer er eerst zelf eens uit te komen met behulp van de manual, mail de maker van het script dat je gebruikt en speel desnoods eens met de standaard stringfuncties van PHP.

Mocht je er echt niet uit gaan komen, dan kun je een nieuw topic openen. Let er dan wel op dat je je relevante code tussen [code]- of [php]-tags zet, en dat je zoveel mogelijk aangeeft waar je mee werkt en wat je wil doen.

Succes. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.