Hallo,
Ich versuche etwas XML zu analysieren und habe es ziemlich schwer. Versuchen Sie insbesondere, den Namen des Stadions (AT & T Center) oder der Stadt und des Bundesstaates zu erhalten. Siehe unten.
Ich kann alles aus dem Element "event-metadata" oder dem Element "site-metadata" mithilfe von "On Element ()" und "XML Attr ()" problemlos analysieren. Es scheint mir, dass der Stadionname ein Attribut des Elements "name" sein sollte, aber JMP scheint es nicht so zu erkennen.
Eine Online-Version des XML ist hier verfügbar: http://showcase.xmlteam.com/open_rendition.php?id=2129
Jede Hilfe wäre sehr dankbar. Möglicherweise gibt es ein Problem mit der Art und Weise, wie es vom Herausgeber markiert wird.
Vielen Dank
-Mike
xmlns: fs = " java.io.File " Datumsdeckungsart = " Veranstaltung " Ereignisschlüssel = " l.nba.com-e.896939 " Ereignisstatus = " Pre-Event " Datumsdeckungswert = " l.nba.com-e.896939 " Start-Datum-Uhrzeit = " 20160114T200000-0500 " Zeitsicherheit = " sicher " Veranstaltungsname = " Regelmäßige Saison " Standortausrichtung = " Zuhause " >
Standortschlüssel = " l.nba.com-s.538102 " Kapazität = " 18581 " >
voll = " AT & T Center " />
Stadt = " San Antonio " Zustand = " Texas " Land = " Vereinigte Staaten von Amerika " />
Ich würde = " l.nba.com-t.21 " >
xmlns: fs = " java.io.File " Teamschlüssel = " l.nba.com-t.21 " Ausrichtung = " Zuhause " >
zuerst = " San Antonio " zuletzt = " Sporen " />
Datumsdeckungsart = " saisonabhängig " />
Ich würde = " l.nba.com-t.11 " >
xmlns: fs = " java.io.File " Teamschlüssel = " l.nba.com-t.11 " Ausrichtung = " Weg " >
zuerst = " Cleveland " zuletzt = " Kavaliere " />
Datumsdeckungsart = " saisonabhängig " />
@ michaelgingras7 schrieb:
Das große Problem war die doppelte Verwendung des "name" -Elements durch den Herausgeber und das Herausfinden, wie dies zu analysieren ist.
Ich habe festgestellt, dass dies eine der größeren Herausforderungen beim Analysieren von XML ist. Der Schlüssel besteht darin, JSL-Variablen zu verwenden, um zu wissen, was das übergeordnete Element ist (wie bei meinen Variablen 'inSite' und 'inTeam' gezeigt).
michaelgingras7 schrieb:Der frustrierendste Teil beim Analysieren von XML besteht darin, herauszufinden, wo der Fehler liegt, da Sie nicht durchgehen können.
Genau. Da mit Parse XML alles in einem Schritt erledigt wird, kann es schwierig sein, das Geschehene zu visualisieren. Manchmal verwende ich die Anweisungen Print oder Show in meinen Start- / End-Tag-Skripts, um die Reihenfolge der Ereignisse anzuzeigen.
Hallo, Justin,
Danke für die tolle Hilfe. Das große Problem war die doppelte Verwendung des "name" -Elements durch den Herausgeber und das Herausfinden, wie dies zu analysieren ist.
Das andere Problem ist, dass ich versucht habe, "name" zweimal in meinem Parse XML () zu analysieren. Das hat auch Fehler verursacht.
Der frustrierendste Teil beim Analysieren von XML besteht darin, herauszufinden, wo der Fehler liegt, da Sie nicht durchgehen können.
Danke noch einmal.
-Mike
Es ist möglich, dass das kaufmännische Und-Zeichen in 'AT & T Center' Probleme verursacht, wenn XML direkt als Zeichenfolge verwendet wird. Dies liegt daran, dass ein Et-Zeichen ein Escape-Zeichen in XML ist. Sie können dieses Zeichen mit "& amp;" Es ist jedoch nicht erforderlich, wenn Sie den XML-String direkt von der Website laden.
Nachfolgend finden Sie meine Implementierung zum Parsen dieses XML-Dokuments.
// 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" );
)
)
)
)
);
Hier ist die Ausgabedatentabelle:
