Hola,
Estoy tratando de analizar algunos XML y estoy teniendo un momento bastante difícil. En particular, tratar de obtener el nombre del estadio (AT&T Center) o la ciudad y el estado. Vea abajo.
Soy capaz de analizar fácilmente cualquier cosa del elemento "metadatos del evento" o del elemento "metadatos del sitio" utilizando "On Element ()" con "XML Attr ()". Me parece que el nombre del estadio debe ser un atributo del elemento "nombre", pero JMP no parece reconocerlo de esa manera.
Una versión en línea del XML está disponible aquí: http://showcase.xmlteam.com/open_rendition.php?id=2129
Cualquier ayuda sería muy apreciada. Tal vez hay un problema con la forma en que está marcado por el editor?
Gracias
-Micro
<metadatos del="" evento=""> xmlns: fs = " java.io.File " fecha-cobertura-tipo = " evento " clave de evento = " l.nba.com-e.896939 " estado del evento = " pre-evento " fecha-cobertura-valor = " l.nba.com-e.896939 " fecha de inicio hora = " 20160114T200000-0500 " certeza del tiempo = " cierto " nombre del evento = " Temporada regular " alineación del sitio = " casa " >
@ michaelgingras7 escribió:
El gran problema fue el doble uso del elemento "nombre" por parte del editor y la forma de analizarlo.
Descubrí que ese es uno de los mayores desafíos de analizar XML. La clave es usar las variables JSL para saber cuál es el elemento principal (como se muestra con mis variables 'inSite' y 'inTeam').
michaelgingras7 escribió:La parte más frustrante del análisis de XML es tratar de averiguar dónde está el error, ya que no puede atravesarlo.
Estoy de acuerdo. Dado que todo se hace en un solo paso con Parse XML, puede ser difícil visualizar lo que está sucediendo. A veces usaré las declaraciones Imprimir o Mostrar en mis scripts de Etiqueta de Inicio / Fin para ver el orden de los eventos que tienen lugar.
Hola Justin,
Gracias por la gran ayuda en esto. El gran problema fue el doble uso del elemento "nombre" por parte del editor y la forma de analizarlo.
El otro problema es que estaba tratando de analizar "nombre" dos veces en mi XML Parse (). Eso también estaba causando errores.
La parte más frustrante del análisis de XML es tratar de averiguar dónde está el error, ya que no puede atravesarlo.
Gracias de nuevo.
-Micro
Es posible que el carácter ampersand en 'AT&T Center' esté causando problemas al usar el XML directamente como una cadena. Esto es porque un apersand es un carácter de escape en XML. Puedes escapar de este personaje con '& amp;' pero no es necesario si carga la cadena XML directamente desde el sitio web.
A continuación se muestra mi implementación de analizar este 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" );
)
)
)
)
);
Aquí está la tabla de datos de salida:
