Salut,
J'essaie d'analyser du XML et de vivre une période assez difficile. En particulier, essayer d'obtenir le nom du stade (Centre AT & T) ou de la ville et de l'état. Voir ci-dessous.
Je peux facilement analyser n'importe quel élément de l'élément "event-metadata" ou de "site-metadata" en utilisant "On Element ()" avec "XML Attr ()". Il me semble que le nom du stade devrait être un attribut de l'élément "nom", mais JMP ne semble pas le reconnaître de cette façon.
Une version en ligne du XML est disponible ici: http://showcase.xmlteam.com/open_rendition.php?id=2129
Toute aide serait très appréciée. Peut-être qu'il y a un problème avec la façon dont il est marqué par l'éditeur?
Merci
-Mike
<événement sportif>
xmlns: fs = " java.io.File " type-date-couverture = " un événement " clé de l'événement = " l.nba.com-f.896939 " statut de l'événement = " pré-événement " date-couverture-valeur = " l.nba.com-f.896939 " date-heure de début = " 20160114T200000-0500 " certitude temporelle = " certain " Nom de l'événement = " Saison régulière " alignement de site = " maison " >
clé de site = " l.nba.com-s.538102 " capacité = " 18581 " >
plein = " Centre AT & T " />
ville = " San Antonio " Etat = " Texas " pays = " Etats-Unis " />
<équipe identifiant = " l.nba.com-t.21 " >
xmlns: fs = " java.io.File " clé de l'équipe = " l.nba.com-t.21 " alignement = " maison " >
premier = " San Antonio " dernier = " Éperons " />
<équipe-stats type-date-couverture = " saison régulière " />
<équipe identifiant = " l.nba.com-t.11 " >
xmlns: fs = " java.io.File " clé de l'équipe = " l.nba.com-t.11 " alignement = " une façon " >
premier = " Cleveland " dernier = " Cavaliers " />
<équipe-stats type-date-couverture = " saison régulière " />
@ michaelgingras7 a écrit:
Le gros problème était la double utilisation de l'élément "name" par l'éditeur et la résolution du problème.
J'ai trouvé que c'était l'un des plus grands défis de l'analyse XML. La clé consiste à utiliser des variables JSL pour savoir quel est l'élément parent (comme indiqué avec mes variables "inSite" et "inTeam").
michaelgingras7 a écrit:La partie la plus frustrante de l'analyse XML est d'essayer de déterminer où se trouve l'erreur, car vous ne pouvez pas la parcourir.
Je suis d'accord. Puisque tout est fait en une seule étape avec Parse XML, il peut être difficile de visualiser ce qui se passe. Parfois, je vais utiliser les instructions Print ou Show dans mes scripts de balises de début / de fin pour voir l'ordre des événements.
Salut Justin,
Merci pour la grande aide sur ceci. Le gros problème était la double utilisation de l'élément "name" par l'éditeur et la résolution du problème.
L'autre problème est que j'essayais d'analyser "name" deux fois dans mon analyse XML (). Cela causait aussi des erreurs.
La partie la plus frustrante de l'analyse XML est d'essayer de déterminer où se trouve l'erreur, car vous ne pouvez pas la parcourir.
Merci encore.
-Mike
Il est possible que le caractère esperluette dans 'AT & T Center' pose des problèmes lors de l'utilisation du code XML directement en tant que chaîne. En effet, un apersand est un caractère d'échappement XML. Vous pouvez échapper à ce personnage avec '& amp;' mais ce n'est pas nécessaire si vous chargez la chaîne XML directement à partir du site Web.
Vous trouverez ci-dessous une implémentation de l'analyse de ce document XML.
// I needed to escape the '&' character in 'AT&T Center' when using a regular string
xmlStr =
"\[
<SPORTS-EVENT>
<EVENT-METADATA fs="java.io.File" date-coverage-type="event" event-key="l.nba.com-e.896939" event-status="pre-event" date-coverage-value="l.nba.com-e.896939" start-date-time="20160114T200000-0500" time-certainty="certain" event-name="Regular Season" site-alignment="home">
<SITE>
<SITE-METADATA site-key="l.nba.com-s.538102" capacity="18581">
<NAME full="AT&T Center"></NAME>
<HOME-LOCATION city="San Antonio" state="Texas" country="USA"></HOME-LOCATION>
</SITE-METADATA>
<SITE-STATS></SITE-STATS>
</SITE>
</EVENT-METADATA>
<TEAM id="l.nba.com-t.21">
<TEAM-METADATA fs="java.io.File" team-key="l.nba.com-t.21" alignment="home">
<NAME first="San Antonio" last="Spurs"></NAME>
</TEAM-METADATA>
<TEAM-STATS date-coverage-type="season-regular"></TEAM-STATS>
</TEAM>
<TEAM id="l.nba.com-t.11">
<TEAM-METADATA fs="java.io.File" team-key="l.nba.com-t.11" alignment="away">
<NAME first="Cleveland" last="Cavaliers"></NAME>
</TEAM-METADATA>
<TEAM-STATS date-coverage-type="season-regular"></TEAM-STATS>
</TEAM>
</SPORTS-EVENT>]\";
// loading the string directly from the website works fine
xmlStr = Load Text File( "http://showcase.xmlteam.com/open_rendition.php?id=2129" );
nt = New Table(
"NBA Sporting events",
New Column("StartTime", Character),
New Column("HomeTeamFirst", Character),
New Column("HomeTeamLast", Character),
New Column("AwayTeamFirst", Character),
New Column("AwayTeamLast", Character),
New Column("City", Character),
New Column("State", Character),
New Column("Country", Character),
New Column("ArenaName", Character)
);
iRow = 0;
Parse XML(
xmlStr,
On Element(
"sports-event",
Start Tag(
nt << add row(1);
iRow++;
)
),
On Element(
"event-metadata",
Start Tag(
nt:StartTime[iRow] = XML Attr( "start-date-time" );
)
),
On Element(
"home-location",
Start Tag(
nt:City[iRow] = XML Attr( "city" );
nt:State[iRow] = XML Attr( "state" );
nt:Country[iRow] = XML Attr( "country" );
)
),
On Element(
"site",
Start Tag(
inSite = 1;
),
End Tag(
inSite = 0;
)
),
On Element(
"team",
Start Tag(
inTeam = 1;
),
End Tag(
inTeam = 0;
)
),
On Element(
"team-metadata",
Start Tag(
alignment = XML Attr("alignment");
)
),
On Element(
"name",
Start Tag(
If(
inSite == 1,
nt:ArenaName[iRow] = XML Attr( "full" ),
inTeam == 1,
Match( alignment,
"home",
nt:HomeTeamFirst[iRow] = XML Attr( "first" );
nt:HomeTeamLast[iRow] = XML Attr( "last" );
,
"away",
nt:AwayTeamFirst[iRow] = XML Attr( "first" );
nt:AwayTeamLast[iRow] = XML Attr( "last" );
)
)
)
)
);
Voici la table de données en sortie:
