こんにちは、
私はいくつかのXMLを解析しようとしていて、かなり困難な時間を過ごしています。特に、スタジアム(AT&Tセンター)または都市と州の名前を取得しようとしています。下記参照。
"On-element()"と "XML Attr()"を使用して、"event-metadata"要素または "site-metadata"要素から何かを簡単に解析することができます。スタジアムの名前は要素 "name"の属性であるべきだと私には思えますが、JMPはそれをそのように認識していないようです。
XMLのオンライン版はこちらから入手できます。 http://showcase.xmlteam.com/open_rendition.php?id=2129
どんな助けでも大いに感謝されるでしょう。出版社によるマークアップ方法に問題があるのでしょうか。
ありがとう
-マイク
<イベントメタデータ xmlns:fs = " java.io.File 「 日付補償タイプ = " イベント 「 イベントキー = " l.nba.com-e.896939 「 イベント状況 = " プレイベント 「 日付カバレッジ値 = " l.nba.com-e.896939 「 開始日時 = " 20160114T200000-0500 「 時間確実性 = " 確かな 「 イベント名 = " レギュラーシーズン 「 サイトアライメント = " 家 「 >
<サイト>
<サイトメタデータサイトキー = " l.nba.com-s.538102 「 容量 = " 18581 「 >
<名前いっぱい = " AT&Tセンター 「 />
<本拠地シティ = " サンアントニオ 「 状態 = " テキサス 「 国 = " 米国 「 />
@ michaelgingras7 書きました:
大きな問題は、出版社による "name"要素の二重使用とそれをどのように解析するかを考え出すことでした。
XMLを構文解析する上での大きな課題の1つであることがわかりました。重要なのは、JSL変数を使用して、親要素が何であるかを知ることです(私の 'inSite'および 'inTeam'変数で示されているように)。
michaelgingras7は書きました:XMLを構文解析する上で最も苛立たしい部分は、エラーを突き止めることができないため、エラーがどこにあるのかを突き止めることです。
同意する。すべてがParse XMLを使用して1ステップで行われるため、何が起こっているのかを視覚化するのは困難な場合があります。開始/終了タグスクリプトでPrintまたはShowステートメントを使用して、発生するイベントの順序を確認することがあります。
こんにちはジャスティン、
これに多大なる助けをありがとう。大きな問題は、出版社による "name"要素の二重使用とそれをどのように解析するかを考え出すことでした。
もう1つの問題は、Parse XML()内で "name"を2回解析しようとしていたことです。それもエラーを引き起こしていました。
XMLを構文解析する上で最も苛立たしい部分は、エラーを突き止めることができないため、エラーがどこにあるのかを突き止めることです。
再度、感謝します。
-マイク
XMLを文字列として直接使用すると、'AT&Tセンター'のアンパサンド文字が問題を引き起こしている可能性があります。これは、apersandがXMLのエスケープ文字だからです。この文字は「&amp;」でエスケープできます。ただし、Webサイトから直接XML文字列を読み込む場合は必要ありません。
以下は、この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" );
)
)
)
)
);
これが出力データテーブルです。
