Ciao,
Sto cercando di analizzare un po 'di XML e di avere un momento abbastanza difficile. In particolare, cercando di ottenere il nome dello stadio (AT & T Center) o la città e lo stato. Vedi sotto.
Sono in grado di analizzare facilmente qualsiasi elemento dall'elemento "evento-metadati" o "metadati del sito" utilizzando "Su elemento ()" con "XML Attr ()". Mi sembra che il nome dello stadio debba essere un attributo dell'elemento "nome", ma JMP non sembra riconoscerlo in questo modo.
Una versione online dell'XML è disponibile qui: http://showcase.xmlteam.com/open_rendition.php?id=2129
Qualsiasi aiuto sarebbe molto apprezzato. Forse c'è un problema con il modo in cui è contrassegnato dall'editore?
Grazie
-Mike
xmlns: fs =" java.io.File " Data-riempimento-tipo =" evento " evento-chiave =" l.nba.com-e.896939 " evento-status =" pre-evento " Data-riempimento-value =" l.nba.com-e.896939 " start-data-ora =" 20160114T200000-0500 " time-certezza =" certo " nome dell'evento =" Stagione regolare " sito-allineamento =" casa " >
sito-chiave =" l.nba.com-s.538102 " capacità =" 18581 " >
pieno =" Centro AT & T " />
città =" Sant 'Antonio " stato =" Texas " nazione =" Stati Uniti d'America " />
id =" l.nba.com-T.21 " >
xmlns: fs =" java.io.File " squadra-chiave =" l.nba.com-T.21 " allineamento =" casa " >
primo =" Sant 'Antonio " scorso =" Spurs " />
Data-riempimento-tipo =" stagione regolare " />
id =" l.nba.com-T.11 " >
xmlns: fs =" java.io.File " squadra-chiave =" l.nba.com-T.11 " allineamento =" lontano " >
primo =" Cleveland " scorso =" Cavaliers " />
Data-riempimento-tipo =" stagione regolare " />
@ michaelgingras7 ha scritto:
Il grosso problema era il doppio uso dell'elemento "nome" da parte dell'editore e capire come analizzarlo.
Ho trovato che essere una delle sfide più grandi di analisi XML. La chiave è usare le variabili JSL per sapere quale sia l'elemento genitore (come mostrato con le variabili "inSite" e "inTeam").
michaelgingras7 ha scritto:La parte più frustrante dell'analisi dell'XML sta cercando di capire dove si trova l'errore, dal momento che non puoi attraversarlo.
Sono d'accordo. Poiché tutto viene eseguito in un solo passaggio con Parse XML, può essere difficile visualizzare ciò che sta accadendo. A volte utilizzerò le istruzioni Stampa o Mostra nei miei script Inizio / Fine tag per vedere l'ordine degli eventi che si verificano.
Ciao Justin,
Grazie per l'aiuto prezioso su questo. Il grosso problema era il doppio uso dell'elemento "nome" da parte dell'editore e capire come analizzarlo.
L'altro problema è che stavo cercando di analizzare "nome" due volte all'interno del mio Parse XML (). Anche questo causava errori.
La parte più frustrante dell'analisi dell'XML sta cercando di capire dove si trova l'errore, dal momento che non puoi attraversarlo.
Grazie ancora.
-Mike
È possibile che il carattere commerciale e commerciale in "Centro AT & T" stia causando problemi quando si utilizza l'XML direttamente come stringa. Questo perché un apersand è un carattere di escape in XML. Puoi sfuggire a questo personaggio con "& amp;" ma non è necessario se carichi la stringa XML direttamente dal sito web.
Di seguito è riportata la mia implementazione dell'analisi di questo documento 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" );
)
)
)
)
);
Ecco la tabella dei dati di output:
