]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Add SportInfo support for MLBOPSXML.dtd.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 17 Jun 2014 14:39:52 +0000 (10:39 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 17 Jun 2014 14:39:52 +0000 (10:39 -0400)
doc/man1/htsn-import.1
schema/MLBOPSXML.dtd [new file with mode: 0644]
schemagen/MLBOPSXML/MLBOPSXML.xml [new file with mode: 0644]
src/TSN/XML/SportInfo.hs
test/xml/sportinfo/MLBOPSXML.dtd [new file with mode: 0644]
test/xml/sportinfo/MLBOPSXML.xml [new file with mode: 0644]

index 77afd35021b1a0d132e55f9a1f823261ef11a5c3..426d18945d7207c79f8cfdcdc029e402c78cb26e 100644 (file)
@@ -198,6 +198,8 @@ MLBIntWalksXML.dtd
 MLBKORateXML.dtd
 .IP \[bu]
 mlbonbasepctxml.dtd
+.IP \[bu]
+MLBOPSXML.dtd
 .RE
 .P
 The GameInfo and SportInfo types do not have their own top-level
diff --git a/schema/MLBOPSXML.dtd b/schema/MLBOPSXML.dtd
new file mode 100644 (file)
index 0000000..2c38afb
--- /dev/null
@@ -0,0 +1,38 @@
+<!ELEMENT message  (XML_File_ID, heading , category , sport , title , Listing+ , time_stamp )>\r
+\r
+<!ELEMENT XML_File_ID  (#PCDATA )>\r
+\r
+<!ELEMENT heading  (#PCDATA )>\r
+\r
+<!ELEMENT category  (#PCDATA )>\r
+\r
+<!ELEMENT sport  (#PCDATA )>\r
+\r
+<!ELEMENT title  (#PCDATA )>\r
+\r
+<!ELEMENT Listing  (Rank , Name , OPS , Average , RBIs , AtBats , Hits , Walks , TB , OnBase , Slugging )>\r
+\r
+<!ELEMENT Rank  (#PCDATA )>\r
+\r
+<!ELEMENT Name  (#PCDATA )>\r
+\r
+<!ELEMENT OPS  (#PCDATA )>\r
+\r
+<!ELEMENT Average  (#PCDATA )>\r
+\r
+<!ELEMENT RBIs  (#PCDATA )>\r
+\r
+<!ELEMENT AtBats  (#PCDATA )>\r
+\r
+<!ELEMENT Hits  (#PCDATA )>\r
+\r
+<!ELEMENT Walks  (#PCDATA )>\r
+\r
+<!ELEMENT TB  (#PCDATA )>\r
+\r
+<!ELEMENT OnBase  (#PCDATA )>\r
+\r
+<!ELEMENT Slugging  (#PCDATA )>\r
+\r
+<!ELEMENT time_stamp  (#PCDATA )>\r
+\r
diff --git a/schemagen/MLBOPSXML/MLBOPSXML.xml b/schemagen/MLBOPSXML/MLBOPSXML.xml
new file mode 100644 (file)
index 0000000..c35b069
--- /dev/null
@@ -0,0 +1,530 @@
+<?xml version="1.0" standalone="no" ?>\r
+<!DOCTYPE message PUBLIC "-//TSN//DTD Statistics 1.0/EN" "MLBOPSXML.dtd">\r
+<message>\r
+<XML_File_ID>39570417</XML_File_ID>\r
+<heading>AAX%AL-ONBASEPLUSSLUGGING-LEADERS</heading>\r
+<category>Statistics</category>\r
+<sport>MLB</sport>\r
+<title>2002 AL On Base Plus Slugging Leaders</title>\r
+<Listing>\r
+<Rank>1</Rank>\r
+<Name>Mike Sweeney, KC</Name>\r
+<OPS>1.006</OPS>\r
+<Average>.364</Average>\r
+<RBIs>37</RBIs>\r
+<AtBats>272</AtBats>\r
+<Hits>99</Hits>\r
+<Walks>30</Walks>\r
+<TB>158</TB>\r
+<OnBase>.425</OnBase>\r
+<Slugging>.581</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jason Giambi, NYY</Name>\r
+<OPS>1.005</OPS>\r
+<Average>.308</Average>\r
+<RBIs>60</RBIs>\r
+<AtBats>279</AtBats>\r
+<Hits>86</Hits>\r
+<Walks>52</Walks>\r
+<TB>161</TB>\r
+<OnBase>.428</OnBase>\r
+<Slugging>.577</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Alex Rodriguez, TEX</Name>\r
+<OPS>1.002</OPS>\r
+<Average>.306</Average>\r
+<RBIs>63</RBIs>\r
+<AtBats>294</AtBats>\r
+<Hits>90</Hits>\r
+<Walks>44</Walks>\r
+<TB>176</TB>\r
+<OnBase>.403</OnBase>\r
+<Slugging>.599</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jim Thome, CLE</Name>\r
+<OPS>.990</OPS>\r
+<Average>.275</Average>\r
+<RBIs>54</RBIs>\r
+<AtBats>251</AtBats>\r
+<Hits>69</Hits>\r
+<Walks>60</Walks>\r
+<TB>143</TB>\r
+<OnBase>.420</OnBase>\r
+<Slugging>.570</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>John Olerud, SEA</Name>\r
+<OPS>.947</OPS>\r
+<Average>.315</Average>\r
+<RBIs>43</RBIs>\r
+<AtBats>267</AtBats>\r
+<Hits>84</Hits>\r
+<Walks>51</Walks>\r
+<TB>141</TB>\r
+<OnBase>.418</OnBase>\r
+<Slugging>.528</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Alfonso Soriano, NYY</Name>\r
+<OPS>.933</OPS>\r
+<Average>.322</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>326</AtBats>\r
+<Hits>105</Hits>\r
+<Walks>11</Walks>\r
+<TB>190</TB>\r
+<OnBase>.350</OnBase>\r
+<Slugging>.583</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Paul Konerko, SOX</Name>\r
+<OPS>.919</OPS>\r
+<Average>.324</Average>\r
+<RBIs>65</RBIs>\r
+<AtBats>290</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>21</Walks>\r
+<TB>159</TB>\r
+<OnBase>.370</OnBase>\r
+<Slugging>.548</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Magglio Ordonez, SOX</Name>\r
+<OPS>.917</OPS>\r
+<Average>.313</Average>\r
+<RBIs>55</RBIs>\r
+<AtBats>281</AtBats>\r
+<Hits>88</Hits>\r
+<Walks>27</Walks>\r
+<TB>153</TB>\r
+<OnBase>.372</OnBase>\r
+<Slugging>.544</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Eric Hinske, TOR</Name>\r
+<OPS>.912</OPS>\r
+<Average>.287</Average>\r
+<RBIs>42</RBIs>\r
+<AtBats>244</AtBats>\r
+<Hits>70</Hits>\r
+<Walks>37</Walks>\r
+<TB>130</TB>\r
+<OnBase>.379</OnBase>\r
+<Slugging>.533</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Delgado, TOR</Name>\r
+<OPS>.908</OPS>\r
+<Average>.258</Average>\r
+<RBIs>56</RBIs>\r
+<AtBats>264</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>55</Walks>\r
+<TB>136</TB>\r
+<OnBase>.393</OnBase>\r
+<Slugging>.515</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Eric Chavez, OAK</Name>\r
+<OPS>.898</OPS>\r
+<Average>.271</Average>\r
+<RBIs>51</RBIs>\r
+<AtBats>266</AtBats>\r
+<Hits>72</Hits>\r
+<Walks>30</Walks>\r
+<TB>147</TB>\r
+<OnBase>.346</OnBase>\r
+<Slugging>.553</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Robin Ventura, NYY</Name>\r
+<OPS>.898</OPS>\r
+<Average>.257</Average>\r
+<RBIs>53</RBIs>\r
+<AtBats>230</AtBats>\r
+<Hits>59</Hits>\r
+<Walks>41</Walks>\r
+<TB>122</TB>\r
+<OnBase>.368</OnBase>\r
+<Slugging>.530</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Rafael Palmeiro, TEX</Name>\r
+<OPS>.895</OPS>\r
+<Average>.267</Average>\r
+<RBIs>44</RBIs>\r
+<AtBats>251</AtBats>\r
+<Hits>67</Hits>\r
+<Walks>41</Walks>\r
+<TB>132</TB>\r
+<OnBase>.369</OnBase>\r
+<Slugging>.526</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Torii Hunter, MIN</Name>\r
+<OPS>.895</OPS>\r
+<Average>.297</Average>\r
+<RBIs>55</RBIs>\r
+<AtBats>300</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>21</Walks>\r
+<TB>166</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.553</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ichiro Suzuki, SEA</Name>\r
+<OPS>.888</OPS>\r
+<Average>.358</Average>\r
+<RBIs>27</RBIs>\r
+<AtBats>307</AtBats>\r
+<Hits>110</Hits>\r
+<Walks>37</Walks>\r
+<TB>142</TB>\r
+<OnBase>.426</OnBase>\r
+<Slugging>.463</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Omar Vizquel, CLE</Name>\r
+<OPS>.880</OPS>\r
+<Average>.302</Average>\r
+<RBIs>45</RBIs>\r
+<AtBats>275</AtBats>\r
+<Hits>83</Hits>\r
+<Walks>36</Walks>\r
+<TB>137</TB>\r
+<OnBase>.382</OnBase>\r
+<Slugging>.498</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Garret Anderson, ANA</Name>\r
+<OPS>.878</OPS>\r
+<Average>.303</Average>\r
+<RBIs>58</RBIs>\r
+<AtBats>310</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>13</Walks>\r
+<TB>171</TB>\r
+<OnBase>.326</OnBase>\r
+<Slugging>.552</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Bernie Williams, NYY</Name>\r
+<OPS>.875</OPS>\r
+<Average>.309</Average>\r
+<RBIs>39</RBIs>\r
+<AtBats>288</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>46</Walks>\r
+<TB>135</TB>\r
+<OnBase>.407</OnBase>\r
+<Slugging>.469</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Tim Salmon, ANA</Name>\r
+<OPS>.875</OPS>\r
+<Average>.277</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>260</AtBats>\r
+<Hits>72</Hits>\r
+<Walks>36</Walks>\r
+<TB>132</TB>\r
+<OnBase>.368</OnBase>\r
+<Slugging>.508</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Shea Hillenbrand, BOS</Name>\r
+<OPS>.873</OPS>\r
+<Average>.313</Average>\r
+<RBIs>49</RBIs>\r
+<AtBats>297</AtBats>\r
+<Hits>93</Hits>\r
+<Walks>11</Walks>\r
+<TB>156</TB>\r
+<OnBase>.348</OnBase>\r
+<Slugging>.525</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Nomar Garciaparra, BOS</Name>\r
+<OPS>.872</OPS>\r
+<Average>.309</Average>\r
+<RBIs>59</RBIs>\r
+<AtBats>288</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>20</Walks>\r
+<TB>150</TB>\r
+<OnBase>.351</OnBase>\r
+<Slugging>.521</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Tony Batista, BAL</Name>\r
+<OPS>.858</OPS>\r
+<Average>.264</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>276</AtBats>\r
+<Hits>73</Hits>\r
+<Walks>24</Walks>\r
+<TB>145</TB>\r
+<OnBase>.332</OnBase>\r
+<Slugging>.525</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Guillen, SEA</Name>\r
+<OPS>.857</OPS>\r
+<Average>.297</Average>\r
+<RBIs>35</RBIs>\r
+<AtBats>222</AtBats>\r
+<Hits>66</Hits>\r
+<Walks>27</Walks>\r
+<TB>108</TB>\r
+<OnBase>.371</OnBase>\r
+<Slugging>.486</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Brad Fullmer, ANA</Name>\r
+<OPS>.852</OPS>\r
+<Average>.268</Average>\r
+<RBIs>29</RBIs>\r
+<AtBats>220</AtBats>\r
+<Hits>59</Hits>\r
+<Walks>17</Walks>\r
+<TB>114</TB>\r
+<OnBase>.333</OnBase>\r
+<Slugging>.518</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Johnny Damon, BOS</Name>\r
+<OPS>.848</OPS>\r
+<Average>.322</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>292</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>27</Walks>\r
+<TB>137</TB>\r
+<OnBase>.378</OnBase>\r
+<Slugging>.469</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Joe Randa, KC</Name>\r
+<OPS>.846</OPS>\r
+<Average>.299</Average>\r
+<RBIs>47</RBIs>\r
+<AtBats>234</AtBats>\r
+<Hits>70</Hits>\r
+<Walks>24</Walks>\r
+<TB>113</TB>\r
+<OnBase>.363</OnBase>\r
+<Slugging>.483</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Robert Fick, DET</Name>\r
+<OPS>.845</OPS>\r
+<Average>.294</Average>\r
+<RBIs>34</RBIs>\r
+<AtBats>269</AtBats>\r
+<Hits>79</Hits>\r
+<Walks>25</Walks>\r
+<TB>131</TB>\r
+<OnBase>.358</OnBase>\r
+<Slugging>.487</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Scott Hatteberg, OAK</Name>\r
+<OPS>.838</OPS>\r
+<Average>.271</Average>\r
+<RBIs>31</RBIs>\r
+<AtBats>236</AtBats>\r
+<Hits>64</Hits>\r
+<Walks>34</Walks>\r
+<TB>110</TB>\r
+<OnBase>.372</OnBase>\r
+<Slugging>.466</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ruben Sierra, SEA</Name>\r
+<OPS>.834</OPS>\r
+<Average>.305</Average>\r
+<RBIs>48</RBIs>\r
+<AtBats>262</AtBats>\r
+<Hits>80</Hits>\r
+<Walks>20</Walks>\r
+<TB>126</TB>\r
+<OnBase>.353</OnBase>\r
+<Slugging>.481</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Miguel Tejada, OAK</Name>\r
+<OPS>.831</OPS>\r
+<Average>.297</Average>\r
+<RBIs>56</RBIs>\r
+<AtBats>316</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>15</Walks>\r
+<TB>156</TB>\r
+<OnBase>.337</OnBase>\r
+<Slugging>.494</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jorge Posada, NYY</Name>\r
+<OPS>.831</OPS>\r
+<Average>.262</Average>\r
+<RBIs>45</RBIs>\r
+<AtBats>252</AtBats>\r
+<Hits>66</Hits>\r
+<Walks>36</Walks>\r
+<TB>121</TB>\r
+<OnBase>.351</OnBase>\r
+<Slugging>.480</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jacque Jones, MIN</Name>\r
+<OPS>.829</OPS>\r
+<Average>.299</Average>\r
+<RBIs>52</RBIs>\r
+<AtBats>308</AtBats>\r
+<Hits>92</Hits>\r
+<Walks>21</Walks>\r
+<TB>150</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.487</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Randy Winn, TB</Name>\r
+<OPS>.821</OPS>\r
+<Average>.305</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>295</AtBats>\r
+<Hits>90</Hits>\r
+<Walks>19</Walks>\r
+<TB>138</TB>\r
+<OnBase>.353</OnBase>\r
+<Slugging>.468</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Beltran, KC</Name>\r
+<OPS>.817</OPS>\r
+<Average>.261</Average>\r
+<RBIs>44</RBIs>\r
+<AtBats>283</AtBats>\r
+<Hits>74</Hits>\r
+<Walks>33</Walks>\r
+<TB>135</TB>\r
+<OnBase>.340</OnBase>\r
+<Slugging>.477</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ellis Burks, CLE</Name>\r
+<OPS>.817</OPS>\r
+<Average>.276</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>246</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>25</Walks>\r
+<TB>115</TB>\r
+<OnBase>.349</OnBase>\r
+<Slugging>.467</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Frank Thomas, SOX</Name>\r
+<OPS>.812</OPS>\r
+<Average>.255</Average>\r
+<RBIs>50</RBIs>\r
+<AtBats>267</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>37</Walks>\r
+<TB>124</TB>\r
+<OnBase>.347</OnBase>\r
+<Slugging>.464</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Bobby Higginson, DET</Name>\r
+<OPS>.808</OPS>\r
+<Average>.288</Average>\r
+<RBIs>30</RBIs>\r
+<AtBats>208</AtBats>\r
+<Hits>60</Hits>\r
+<Walks>23</Walks>\r
+<TB>94</TB>\r
+<OnBase>.356</OnBase>\r
+<Slugging>.452</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jay Gibbons, BAL</Name>\r
+<OPS>.807</OPS>\r
+<Average>.255</Average>\r
+<RBIs>34</RBIs>\r
+<AtBats>235</AtBats>\r
+<Hits>60</Hits>\r
+<Walks>29</Walks>\r
+<TB>111</TB>\r
+<OnBase>.335</OnBase>\r
+<Slugging>.472</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Derek Jeter, NYY</Name>\r
+<OPS>.805</OPS>\r
+<Average>.301</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>319</AtBats>\r
+<Hits>96</Hits>\r
+<Walks>33</Walks>\r
+<TB>138</TB>\r
+<OnBase>.373</OnBase>\r
+<Slugging>.433</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Troy Glaus, ANA</Name>\r
+<OPS>.802</OPS>\r
+<Average>.245</Average>\r
+<RBIs>53</RBIs>\r
+<AtBats>274</AtBats>\r
+<Hits>67</Hits>\r
+<Walks>39</Walks>\r
+<TB>126</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.460</Slugging>\r
+</Listing>\r
+<time_stamp> June 27, 2002, at 11:52 AM ET </time_stamp>\r
+</message>\r
index 44688317fa9b04414d2bfa16d9546a4f9392f817..82d1833888961838a8592c5cb82de0b74e01f436 100644 (file)
@@ -116,7 +116,7 @@ dtds =
     "MLBIntWalksXML.dtd",
     "MLBKORateXML.dtd",
     "mlbonbasepctxml.dtd",
-    "MLBOPSXML.dtd", -- no dtd
+    "MLBOPSXML.dtd",
     "MLBPlateAppsXML.dtd", -- no dtd
     "mlbrbisxml.dtd", -- no dtd
     "mlbrunsleadersxml.dtd", -- no dtd
@@ -360,7 +360,8 @@ sport_info_test_files =
     "MLBHRFreqXML.xml",
     "MLBIntWalksXML.xml",
     "MLBKORateXML.xml",
-    "mlbonbasepctxml.xml"
+    "mlbonbasepctxml.xml",
+    "MLBOPSXML.xml"
   ]
 
 
diff --git a/test/xml/sportinfo/MLBOPSXML.dtd b/test/xml/sportinfo/MLBOPSXML.dtd
new file mode 100644 (file)
index 0000000..2c38afb
--- /dev/null
@@ -0,0 +1,38 @@
+<!ELEMENT message  (XML_File_ID, heading , category , sport , title , Listing+ , time_stamp )>\r
+\r
+<!ELEMENT XML_File_ID  (#PCDATA )>\r
+\r
+<!ELEMENT heading  (#PCDATA )>\r
+\r
+<!ELEMENT category  (#PCDATA )>\r
+\r
+<!ELEMENT sport  (#PCDATA )>\r
+\r
+<!ELEMENT title  (#PCDATA )>\r
+\r
+<!ELEMENT Listing  (Rank , Name , OPS , Average , RBIs , AtBats , Hits , Walks , TB , OnBase , Slugging )>\r
+\r
+<!ELEMENT Rank  (#PCDATA )>\r
+\r
+<!ELEMENT Name  (#PCDATA )>\r
+\r
+<!ELEMENT OPS  (#PCDATA )>\r
+\r
+<!ELEMENT Average  (#PCDATA )>\r
+\r
+<!ELEMENT RBIs  (#PCDATA )>\r
+\r
+<!ELEMENT AtBats  (#PCDATA )>\r
+\r
+<!ELEMENT Hits  (#PCDATA )>\r
+\r
+<!ELEMENT Walks  (#PCDATA )>\r
+\r
+<!ELEMENT TB  (#PCDATA )>\r
+\r
+<!ELEMENT OnBase  (#PCDATA )>\r
+\r
+<!ELEMENT Slugging  (#PCDATA )>\r
+\r
+<!ELEMENT time_stamp  (#PCDATA )>\r
+\r
diff --git a/test/xml/sportinfo/MLBOPSXML.xml b/test/xml/sportinfo/MLBOPSXML.xml
new file mode 100644 (file)
index 0000000..c35b069
--- /dev/null
@@ -0,0 +1,530 @@
+<?xml version="1.0" standalone="no" ?>\r
+<!DOCTYPE message PUBLIC "-//TSN//DTD Statistics 1.0/EN" "MLBOPSXML.dtd">\r
+<message>\r
+<XML_File_ID>39570417</XML_File_ID>\r
+<heading>AAX%AL-ONBASEPLUSSLUGGING-LEADERS</heading>\r
+<category>Statistics</category>\r
+<sport>MLB</sport>\r
+<title>2002 AL On Base Plus Slugging Leaders</title>\r
+<Listing>\r
+<Rank>1</Rank>\r
+<Name>Mike Sweeney, KC</Name>\r
+<OPS>1.006</OPS>\r
+<Average>.364</Average>\r
+<RBIs>37</RBIs>\r
+<AtBats>272</AtBats>\r
+<Hits>99</Hits>\r
+<Walks>30</Walks>\r
+<TB>158</TB>\r
+<OnBase>.425</OnBase>\r
+<Slugging>.581</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jason Giambi, NYY</Name>\r
+<OPS>1.005</OPS>\r
+<Average>.308</Average>\r
+<RBIs>60</RBIs>\r
+<AtBats>279</AtBats>\r
+<Hits>86</Hits>\r
+<Walks>52</Walks>\r
+<TB>161</TB>\r
+<OnBase>.428</OnBase>\r
+<Slugging>.577</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Alex Rodriguez, TEX</Name>\r
+<OPS>1.002</OPS>\r
+<Average>.306</Average>\r
+<RBIs>63</RBIs>\r
+<AtBats>294</AtBats>\r
+<Hits>90</Hits>\r
+<Walks>44</Walks>\r
+<TB>176</TB>\r
+<OnBase>.403</OnBase>\r
+<Slugging>.599</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jim Thome, CLE</Name>\r
+<OPS>.990</OPS>\r
+<Average>.275</Average>\r
+<RBIs>54</RBIs>\r
+<AtBats>251</AtBats>\r
+<Hits>69</Hits>\r
+<Walks>60</Walks>\r
+<TB>143</TB>\r
+<OnBase>.420</OnBase>\r
+<Slugging>.570</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>John Olerud, SEA</Name>\r
+<OPS>.947</OPS>\r
+<Average>.315</Average>\r
+<RBIs>43</RBIs>\r
+<AtBats>267</AtBats>\r
+<Hits>84</Hits>\r
+<Walks>51</Walks>\r
+<TB>141</TB>\r
+<OnBase>.418</OnBase>\r
+<Slugging>.528</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Alfonso Soriano, NYY</Name>\r
+<OPS>.933</OPS>\r
+<Average>.322</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>326</AtBats>\r
+<Hits>105</Hits>\r
+<Walks>11</Walks>\r
+<TB>190</TB>\r
+<OnBase>.350</OnBase>\r
+<Slugging>.583</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Paul Konerko, SOX</Name>\r
+<OPS>.919</OPS>\r
+<Average>.324</Average>\r
+<RBIs>65</RBIs>\r
+<AtBats>290</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>21</Walks>\r
+<TB>159</TB>\r
+<OnBase>.370</OnBase>\r
+<Slugging>.548</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Magglio Ordonez, SOX</Name>\r
+<OPS>.917</OPS>\r
+<Average>.313</Average>\r
+<RBIs>55</RBIs>\r
+<AtBats>281</AtBats>\r
+<Hits>88</Hits>\r
+<Walks>27</Walks>\r
+<TB>153</TB>\r
+<OnBase>.372</OnBase>\r
+<Slugging>.544</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Eric Hinske, TOR</Name>\r
+<OPS>.912</OPS>\r
+<Average>.287</Average>\r
+<RBIs>42</RBIs>\r
+<AtBats>244</AtBats>\r
+<Hits>70</Hits>\r
+<Walks>37</Walks>\r
+<TB>130</TB>\r
+<OnBase>.379</OnBase>\r
+<Slugging>.533</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Delgado, TOR</Name>\r
+<OPS>.908</OPS>\r
+<Average>.258</Average>\r
+<RBIs>56</RBIs>\r
+<AtBats>264</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>55</Walks>\r
+<TB>136</TB>\r
+<OnBase>.393</OnBase>\r
+<Slugging>.515</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Eric Chavez, OAK</Name>\r
+<OPS>.898</OPS>\r
+<Average>.271</Average>\r
+<RBIs>51</RBIs>\r
+<AtBats>266</AtBats>\r
+<Hits>72</Hits>\r
+<Walks>30</Walks>\r
+<TB>147</TB>\r
+<OnBase>.346</OnBase>\r
+<Slugging>.553</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Robin Ventura, NYY</Name>\r
+<OPS>.898</OPS>\r
+<Average>.257</Average>\r
+<RBIs>53</RBIs>\r
+<AtBats>230</AtBats>\r
+<Hits>59</Hits>\r
+<Walks>41</Walks>\r
+<TB>122</TB>\r
+<OnBase>.368</OnBase>\r
+<Slugging>.530</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Rafael Palmeiro, TEX</Name>\r
+<OPS>.895</OPS>\r
+<Average>.267</Average>\r
+<RBIs>44</RBIs>\r
+<AtBats>251</AtBats>\r
+<Hits>67</Hits>\r
+<Walks>41</Walks>\r
+<TB>132</TB>\r
+<OnBase>.369</OnBase>\r
+<Slugging>.526</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Torii Hunter, MIN</Name>\r
+<OPS>.895</OPS>\r
+<Average>.297</Average>\r
+<RBIs>55</RBIs>\r
+<AtBats>300</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>21</Walks>\r
+<TB>166</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.553</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ichiro Suzuki, SEA</Name>\r
+<OPS>.888</OPS>\r
+<Average>.358</Average>\r
+<RBIs>27</RBIs>\r
+<AtBats>307</AtBats>\r
+<Hits>110</Hits>\r
+<Walks>37</Walks>\r
+<TB>142</TB>\r
+<OnBase>.426</OnBase>\r
+<Slugging>.463</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Omar Vizquel, CLE</Name>\r
+<OPS>.880</OPS>\r
+<Average>.302</Average>\r
+<RBIs>45</RBIs>\r
+<AtBats>275</AtBats>\r
+<Hits>83</Hits>\r
+<Walks>36</Walks>\r
+<TB>137</TB>\r
+<OnBase>.382</OnBase>\r
+<Slugging>.498</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Garret Anderson, ANA</Name>\r
+<OPS>.878</OPS>\r
+<Average>.303</Average>\r
+<RBIs>58</RBIs>\r
+<AtBats>310</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>13</Walks>\r
+<TB>171</TB>\r
+<OnBase>.326</OnBase>\r
+<Slugging>.552</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Bernie Williams, NYY</Name>\r
+<OPS>.875</OPS>\r
+<Average>.309</Average>\r
+<RBIs>39</RBIs>\r
+<AtBats>288</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>46</Walks>\r
+<TB>135</TB>\r
+<OnBase>.407</OnBase>\r
+<Slugging>.469</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Tim Salmon, ANA</Name>\r
+<OPS>.875</OPS>\r
+<Average>.277</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>260</AtBats>\r
+<Hits>72</Hits>\r
+<Walks>36</Walks>\r
+<TB>132</TB>\r
+<OnBase>.368</OnBase>\r
+<Slugging>.508</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Shea Hillenbrand, BOS</Name>\r
+<OPS>.873</OPS>\r
+<Average>.313</Average>\r
+<RBIs>49</RBIs>\r
+<AtBats>297</AtBats>\r
+<Hits>93</Hits>\r
+<Walks>11</Walks>\r
+<TB>156</TB>\r
+<OnBase>.348</OnBase>\r
+<Slugging>.525</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Nomar Garciaparra, BOS</Name>\r
+<OPS>.872</OPS>\r
+<Average>.309</Average>\r
+<RBIs>59</RBIs>\r
+<AtBats>288</AtBats>\r
+<Hits>89</Hits>\r
+<Walks>20</Walks>\r
+<TB>150</TB>\r
+<OnBase>.351</OnBase>\r
+<Slugging>.521</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Tony Batista, BAL</Name>\r
+<OPS>.858</OPS>\r
+<Average>.264</Average>\r
+<RBIs>46</RBIs>\r
+<AtBats>276</AtBats>\r
+<Hits>73</Hits>\r
+<Walks>24</Walks>\r
+<TB>145</TB>\r
+<OnBase>.332</OnBase>\r
+<Slugging>.525</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Guillen, SEA</Name>\r
+<OPS>.857</OPS>\r
+<Average>.297</Average>\r
+<RBIs>35</RBIs>\r
+<AtBats>222</AtBats>\r
+<Hits>66</Hits>\r
+<Walks>27</Walks>\r
+<TB>108</TB>\r
+<OnBase>.371</OnBase>\r
+<Slugging>.486</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Brad Fullmer, ANA</Name>\r
+<OPS>.852</OPS>\r
+<Average>.268</Average>\r
+<RBIs>29</RBIs>\r
+<AtBats>220</AtBats>\r
+<Hits>59</Hits>\r
+<Walks>17</Walks>\r
+<TB>114</TB>\r
+<OnBase>.333</OnBase>\r
+<Slugging>.518</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Johnny Damon, BOS</Name>\r
+<OPS>.848</OPS>\r
+<Average>.322</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>292</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>27</Walks>\r
+<TB>137</TB>\r
+<OnBase>.378</OnBase>\r
+<Slugging>.469</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Joe Randa, KC</Name>\r
+<OPS>.846</OPS>\r
+<Average>.299</Average>\r
+<RBIs>47</RBIs>\r
+<AtBats>234</AtBats>\r
+<Hits>70</Hits>\r
+<Walks>24</Walks>\r
+<TB>113</TB>\r
+<OnBase>.363</OnBase>\r
+<Slugging>.483</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Robert Fick, DET</Name>\r
+<OPS>.845</OPS>\r
+<Average>.294</Average>\r
+<RBIs>34</RBIs>\r
+<AtBats>269</AtBats>\r
+<Hits>79</Hits>\r
+<Walks>25</Walks>\r
+<TB>131</TB>\r
+<OnBase>.358</OnBase>\r
+<Slugging>.487</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Scott Hatteberg, OAK</Name>\r
+<OPS>.838</OPS>\r
+<Average>.271</Average>\r
+<RBIs>31</RBIs>\r
+<AtBats>236</AtBats>\r
+<Hits>64</Hits>\r
+<Walks>34</Walks>\r
+<TB>110</TB>\r
+<OnBase>.372</OnBase>\r
+<Slugging>.466</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ruben Sierra, SEA</Name>\r
+<OPS>.834</OPS>\r
+<Average>.305</Average>\r
+<RBIs>48</RBIs>\r
+<AtBats>262</AtBats>\r
+<Hits>80</Hits>\r
+<Walks>20</Walks>\r
+<TB>126</TB>\r
+<OnBase>.353</OnBase>\r
+<Slugging>.481</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Miguel Tejada, OAK</Name>\r
+<OPS>.831</OPS>\r
+<Average>.297</Average>\r
+<RBIs>56</RBIs>\r
+<AtBats>316</AtBats>\r
+<Hits>94</Hits>\r
+<Walks>15</Walks>\r
+<TB>156</TB>\r
+<OnBase>.337</OnBase>\r
+<Slugging>.494</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jorge Posada, NYY</Name>\r
+<OPS>.831</OPS>\r
+<Average>.262</Average>\r
+<RBIs>45</RBIs>\r
+<AtBats>252</AtBats>\r
+<Hits>66</Hits>\r
+<Walks>36</Walks>\r
+<TB>121</TB>\r
+<OnBase>.351</OnBase>\r
+<Slugging>.480</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jacque Jones, MIN</Name>\r
+<OPS>.829</OPS>\r
+<Average>.299</Average>\r
+<RBIs>52</RBIs>\r
+<AtBats>308</AtBats>\r
+<Hits>92</Hits>\r
+<Walks>21</Walks>\r
+<TB>150</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.487</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Randy Winn, TB</Name>\r
+<OPS>.821</OPS>\r
+<Average>.305</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>295</AtBats>\r
+<Hits>90</Hits>\r
+<Walks>19</Walks>\r
+<TB>138</TB>\r
+<OnBase>.353</OnBase>\r
+<Slugging>.468</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Carlos Beltran, KC</Name>\r
+<OPS>.817</OPS>\r
+<Average>.261</Average>\r
+<RBIs>44</RBIs>\r
+<AtBats>283</AtBats>\r
+<Hits>74</Hits>\r
+<Walks>33</Walks>\r
+<TB>135</TB>\r
+<OnBase>.340</OnBase>\r
+<Slugging>.477</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Ellis Burks, CLE</Name>\r
+<OPS>.817</OPS>\r
+<Average>.276</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>246</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>25</Walks>\r
+<TB>115</TB>\r
+<OnBase>.349</OnBase>\r
+<Slugging>.467</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Frank Thomas, SOX</Name>\r
+<OPS>.812</OPS>\r
+<Average>.255</Average>\r
+<RBIs>50</RBIs>\r
+<AtBats>267</AtBats>\r
+<Hits>68</Hits>\r
+<Walks>37</Walks>\r
+<TB>124</TB>\r
+<OnBase>.347</OnBase>\r
+<Slugging>.464</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Bobby Higginson, DET</Name>\r
+<OPS>.808</OPS>\r
+<Average>.288</Average>\r
+<RBIs>30</RBIs>\r
+<AtBats>208</AtBats>\r
+<Hits>60</Hits>\r
+<Walks>23</Walks>\r
+<TB>94</TB>\r
+<OnBase>.356</OnBase>\r
+<Slugging>.452</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Jay Gibbons, BAL</Name>\r
+<OPS>.807</OPS>\r
+<Average>.255</Average>\r
+<RBIs>34</RBIs>\r
+<AtBats>235</AtBats>\r
+<Hits>60</Hits>\r
+<Walks>29</Walks>\r
+<TB>111</TB>\r
+<OnBase>.335</OnBase>\r
+<Slugging>.472</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Derek Jeter, NYY</Name>\r
+<OPS>.805</OPS>\r
+<Average>.301</Average>\r
+<RBIs>38</RBIs>\r
+<AtBats>319</AtBats>\r
+<Hits>96</Hits>\r
+<Walks>33</Walks>\r
+<TB>138</TB>\r
+<OnBase>.373</OnBase>\r
+<Slugging>.433</Slugging>\r
+</Listing>\r
+<Listing>\r
+<Rank></Rank>\r
+<Name>Troy Glaus, ANA</Name>\r
+<OPS>.802</OPS>\r
+<Average>.245</Average>\r
+<RBIs>53</RBIs>\r
+<AtBats>274</AtBats>\r
+<Hits>67</Hits>\r
+<Walks>39</Walks>\r
+<TB>126</TB>\r
+<OnBase>.342</OnBase>\r
+<Slugging>.460</Slugging>\r
+</Listing>\r
+<time_stamp> June 27, 2002, at 11:52 AM ET </time_stamp>\r
+</message>\r