안녕하세요,
XML을 파싱하고 꽤 어려운 시간을 보내려고합니다. 특히 스타디움 (AT & T 센터)이나 도시 및 주 이름을 얻으려고 시도하는 경우. 아래를 참조하십시오.
"Element Attach ()"및 "XML Attr ()"을 사용하여 "이벤트 메타 데이터"요소 또는 "사이트 메타 데이터"요소에서 쉽게 구문 분석 할 수 있습니다. 스타디움 이름은 "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 센터 " />
<집 위치 시티 = " 샌 안토니오 " 상태 = " 텍사스 " 국가 = " 미국 " />
<팀 신분증 = " l.nba.com-t.21 " >
<팀 메타 데이터 xmlns : fs = " java.io.File " 팀 키 = " l.nba.com-t.21 " 조정 = " 집 " >
<이름 먼저 = " 샌 안토니오 " 마지막 = " 박차 선수 " />
<팀 통계 날짜 커버리지 유형 = " 계절에 맞는 " />
<팀 신분증 = " l.nba.com-t.11 " >
<팀 메타 데이터 xmlns : fs = " java.io.File " 팀 키 = " l.nba.com-t.11 " 조정 = " 떨어져 " >
<이름 먼저 = " 클리블랜드 " 마지막 = " 캐 벌리 어스 " />
<팀 통계 날짜 커버리지 유형 = " 계절에 맞는 " />
@ michaelgingras7 쓴 :
가장 큰 문제는 게시자가 "이름"요소를 두 번 사용하고이를 구문 분석하는 방법을 파악하는 것이 었습니다.
XML을 파싱하는 것이 더 큰 과제 중 하나임을 발견했습니다. 핵심은 JSL 변수를 사용하여 부모 요소가 무엇인지 파악하는 것입니다 ( 'inSite'및 'inTeam'변수로 표시됨).
michaelgingras7 쓴 :XML 구문 분석에서 가장 좌절스러운 부분은 오류를 어디로 돌릴 수 없는지를 파악하려고 시도하는 것입니다.
동의한다. Parse XML을 사용하면 모든 것이 한 번에 완료되기 때문에 상황을 시각화하는 것이 어려울 수 있습니다. 가끔 시작 / 종료 태그 스크립트에 Print 또는 Show 문을 사용하여 발생하는 이벤트의 순서를 봅니다.
안녕 저스틴,
이것에 대한 큰 도움에 감사드립니다. 가장 큰 문제는 게시자가 "이름"요소를 두 번 사용하고이를 구문 분석하는 방법을 파악하는 것이 었습니다.
다른 문제는 내 Parse XML () 내에서 "name"을 두 번 구문 분석하려고했기 때문입니다. 그것은 또한 오류를 일으키는 것입니다.
XML 구문 분석에서 가장 좌절스러운 부분은 오류를 어디로 돌릴 수 없는지를 파악하려고 시도하는 것입니다.
다시 한번 감사드립니다.
-마이크
XML을 문자열로 직접 사용할 때 'AT & T Center'의 앰퍼샌드 문자로 인해 문제가 발생할 수 있습니다. 이것은 apersand가 XML에서 이스케이프 문자이기 때문입니다. 이 캐릭터를 '& amp;'로 이스케이프 처리 할 수 있습니다. 웹 사이트에서 직접 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" );
)
)
)
)
);
다음은 출력 데이터 테이블입니다.
