2016-10-08 2 views
-1

XML 코드를 기반으로하는 야구 통계를 시각화하는 웹 사이트를 만들려고합니다. 그 HTML 구문 분석에 대한 내 자바 클래스 여기왜 여기에 반환 null입니까?

<?xml version = "1.0" encoding = "utf-8"?> 
    <phillies> 
    <player> 
     <name>Ryan Howard</name> 
     <position>First Baseman</position> 
     <bats>Left</bats> 
     <throws>Left</throws> 
     <year2004> 
     <games>18</games> 
     <pa>42</pa> 
     <ab>39</ab> 
     <hits>11</hits> 
     <runs>9</runs> 
     <doubles>5</doubles> 
     <triples>0</triples> 
     <hr>2</hr> 
     <rbi>5</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>2</bb> 
     <so>13</so> 
     <ba>.282</ba> 
     </year2004> 
     <year2005> 
     <games>88</games> 
     <pa>348</pa> 
     <ab>312</ab> 
     <hits>90</hits> 
     <runs>52</runs> 
     <doubles>17</doubles> 
     <triples>2</triples> 
     <hr>22</hr> 
     <rbi>63</rbi> 
     <sb>0</sb> 
     <cs>1</cs> 
     <bb>33</bb> 
     <so>100</so> 
     <ba>.288</ba> 
     </year2005> 
     <year2006> 
     <games>159</games> 
     <pa>704</pa> 
     <ab>581</ab> 
     <hits>182</hits> 
     <runs>104</runs> 
     <doubles>25</doubles> 
     <triples>1</triples> 
     <hr>58</hr> 
     <rbi>149</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>108</bb> 
     <so>181</so> 
     <ba>.313</ba> 
     </year2006> 
     <year2007> 
     <games>144</games> 
     <pa>648</pa> 
     <ab>529</ab> 
     <hits>142</hits> 
     <runs>94</runs> 
     <doubles>26</doubles> 
     <triples>0</triples> 
     <hr>47</hr> 
     <rbi>136</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>107</bb> 
     <so>199</so> 
     <ba>.268</ba> 
     </year2007> 
     <year2008> 
     <games>162</games> 
     <pa>700</pa> 
     <ab>610</ab> 
     <hits>153</hits> 
     <runs>105</runs> 
     <doubles>26</doubles> 
     <triples>4</triples> 
     <hr>48</hr> 
     <rbi>146</rbi> 
     <sb>1</sb> 
     <cs>1</cs> 
     <bb>81</bb> 
     <so>199</so> 
     <ba>.251</ba> 
     </year2008> 
     <year2009> 
     <games>160</games> 
     <pa>703</pa> 
     <ab>616</ab> 
     <hits>172</hits> 
     <runs>105</runs> 
     <doubles>37</doubles> 
     <triples>4</triples> 
     <hr>45</hr> 
     <rbi>141</rbi> 
     <sb>8</sb> 
     <cs>1</cs> 
     <bb>75</bb> 
     <so>186</so> 
     <ba>.279</ba> 
     </year2009> 
     <year2010> 
     <games>143</games> 
     <pa>620</pa> 
     <ab>550</ab> 
     <hits>152</hits> 
     <runs>87</runs> 
     <doubles>23</doubles> 
     <triples>5</triples> 
     <hr>31</hr> 
     <rbi>108</rbi> 
     <sb>1</sb> 
     <cs>1</cs> 
     <bb>59</bb> 
     <so>157</so> 
     <ba>.276</ba> 
     </year2010> 
     <year2011> 
     <games>152</games> 
     <pa>644</pa> 
     <ab>557</ab> 
     <hits>141</hits> 
     <runs>81</runs> 
     <doubles>30</doubles> 
     <triples>1</triples> 
     <hr>33</hr> 
     <rbi>116</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>75</bb> 
     <so>172</so> 
     <ba>.253</ba> 
     </year2011> 
     <year2012> 
     <games>71</games> 
     <pa>292</pa> 
     <ab>260</ab> 
     <hits>57</hits> 
     <runs>28</runs> 
     <doubles>11</doubles> 
     <triples>0</triples> 
     <hr>14</hr> 
     <rbi>56</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>25</bb> 
     <so>99</so> 
     <ba>.219</ba> 
     </year2012> 
     <year2013> 
     <games>80</games> 
     <pa>317</pa> 
     <ab>286</ab> 
     <hits>76</hits> 
     <runs>34</runs> 
     <doubles>20</doubles> 
     <triples>2</triples> 
     <hr>11</hr> 
     <rbi>43</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>23</bb> 
     <so>95</so> 
     <ba>.266</ba> 
     </year2013> 
     <year2014> 
     <games>153</games> 
     <pa>648</pa> 
     <ab>569</ab> 
     <hits>127</hits> 
     <runs>65</runs> 
     <doubles>18</doubles> 
     <triples>1</triples> 
     <hr>23</hr> 
     <rbi>95</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>67</bb> 
     <so>190</so> 
     <ba>.223</ba> 
     </year2014> 
     <year2015> 
     <games>129</games> 
     <pa>503</pa> 
     <ab>467</ab> 
     <hits>107</hits> 
     <runs>53</runs> 
     <doubles>29</doubles> 
     <triples>1</triples> 
     <hr>23</hr> 
     <rbi>77</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>27</bb> 
     <so>138</so> 
     <ba>.229</ba> 
     </year2015> 
     <year2016> 
     <games>112</games> 
     <pa>362</pa> 
     <ab>331</ab> 
     <hits>65</hits> 
     <runs>35</runs> 
     <doubles>10</doubles> 
     <triples>0</triples> 
     <hr>25</hr> 
     <rbi>59</rbi> 
     <sb>0</sb> 
     <cs>1</cs> 
     <bb>27</bb> 
     <so>138</so> 
     <ba>.196</ba> 
     </year2016> 
    </player> 

    <player> 
     <name>Maikel Franco</name> 
     <position>Third Baseman</position> 
     <bats>Right</bats> 
     <throws>Right</throws> 
     <year2014> 
     <games>16</games> 
     <pa>58</pa> 
     <ab>56</ab> 
     <runs>5</runs> 
     <hits>10</hits> 
     <doubles>2</doubles> 
     <triples>0</triples> 
     <hr>0</hr> 
     <rbi>5</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>1</bb> 
     <so>13</so> 
     <ba>.179</ba> 
     </year2014> 
     <year2015> 
     <games>80</games> 
     <pa>335</pa> 
     <ab>304</ab> 
     <runs>45</runs> 
     <hits>85</hits> 
     <doubles>22</doubles> 
     <triples>1</triples> 
     <hr>14</hr> 
     <rbi>50</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>26</bb> 
     <so>52</so> 
     <ba>.280</ba> 
     </year2015> 
     <year2016> 
     <games>152</games> 
     <pa>630</pa> 
     <ab>581</ab> 
     <runs>67</runs> 
     <hits>148</hits> 
     <doubles>23</doubles> 
     <triples>1</triples> 
     <hr>25</hr> 
     <rbi>88</rbi> 
     <sb>1</sb> 
     <cs>1</cs> 
     <bb>40</bb> 
     <so>106</so> 
     <ba>.255</ba> 
     </year2016> 
    </player> 

    <player> 
     <name>Cameron Rupp</name> 
     <position>Catcher</position> 
     <bats>Right</bats> 
     <throws>Right</throws> 
     <year2013> 
     <games>4</games> 
     <pa>14</pa> 
     <ab>13</ab> 
     <runs>1</runs> 
     <hits>4</hits> 
     <doubles>1</doubles> 
     <triples>0</triples> 
     <hr>0</hr> 
     <rbi>2</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>1</bb> 
     <so>4</so> 
     <ba>.308</ba> 
     </year2013> 
     <year2014> 
     <games>18</games> 
     <pa>64</pa> 
     <ab>60</ab> 
     <runs>4</runs> 
     <hits>11</hits> 
     <doubles>4</doubles> 
     <triples>0</triples> 
     <hr>0</hr> 
     <rbi>6</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>4</bb> 
     <so>20</so> 
     <ba>.183</ba> 
     </year2014> 
     <year2015> 
     <games>81</games> 
     <pa>299</pa> 
     <ab>270</ab> 
     <runs>24</runs> 
     <hits>63</hits> 
     <doubles>9</doubles> 
     <triples>1</triples> 
     <hr>9</hr> 
     <rbi>28</rbi> 
     <sb>0</sb> 
     <cs>1</cs> 
     <bb>24</bb> 
     <so>71</so> 
     <ba>.233</ba> 
     </year2015> 
     <year2016> 
     <games>105</games> 
     <pa>419</pa> 
     <ab>389</ab> 
     <runs>36</runs> 
     <hits>98</hits> 
     <doubles>26</doubles> 
     <triples>1</triples> 
     <hr>16</hr> 
     <rbi>54</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>24</bb> 
     <so>114</so> 
     <ba>.252</ba> 
     </year2016> 
    </player> 

    <player> 
     <name>Tommy Joseph</name> 
     <position>First Baseman</position> 
     <bats>Right</bats> 
     <throws>Right</throws> 
     <year2016> 
     <games>107</games> 
     <pa>347</pa> 
     <ab>315</ab> 
     <runs>47</runs> 
     <hits>81</hits> 
     <doubles>15</doubles> 
     <triples>0</triples> 
     <hr>21</hr> 
     <rbi>47</rbi> 
     <sb>1</sb> 
     <cs>1</cs> 
     <bb>22</bb> 
     <so>75</so> 
     <ba>.257</ba> 
     </year2016> 
    </player> 

    <player> 
     <name>Cesar Hernandez</name> 
     <position>Second Baseman</position> 
     <bats>Switch</bats> 
     <throws>Right</throws> 
     <year2013> 
     <games>34</games> 
     <pa>131</pa> 
     <ab>121</ab> 
     <runs>17</runs> 
     <hits>35</hits> 
     <doubles>5</doubles> 
     <triples>0</triples> 
     <hr>0</hr> 
     <rbi>10</rbi> 
     <sb>0</sb> 
     <cs>3</cs> 
     <bb>9</bb> 
     <so>26</so> 
     <ba>.289</ba> 
     </year2013> 
     <year2014> 
     <games>66</games> 
     <pa>125</pa> 
     <ab>114</ab> 
     <runs>13</runs> 
     <hits>27</hits> 
     <doubles>2</doubles> 
     <triples>0</triples> 
     <hr>1</hr> 
     <rbi>4</rbi> 
     <sb>1</sb> 
     <cs>1</cs> 
     <bb>9</bb> 
     <so>33</so> 
     <ba>.237</ba> 
     </year2014> 
     <year2015> 
     <games>127</games> 
     <pa>452</pa> 
     <ab>405</ab> 
     <runs>57</runs> 
     <hits>110</hits> 
     <doubles>20</doubles> 
     <triples>4</triples> 
     <hr>1</hr> 
     <rbi>35</rbi> 
     <sb>19</sb> 
     <cs>5</cs> 
     <bb>40</bb> 
     <so>86</so> 
     <ba>.274</ba> 
     </year2015> 
     <year2016> 
     <games>155</games> 
     <pa>622</pa> 
     <ab>547</ab> 
     <runs>67</runs> 
     <hits>161</hits> 
     <doubles>14</doubles> 
     <triples>11</triples> 
     <hr>6</hr> 
     <rbi>39</rbi> 
     <sb>17</sb> 
     <cs>13</cs> 
     <bb>66</bb> 
     <so>116</so> 
     <ba>.294</ba> 
     </year2016> 
    </player> 

    <player> 
     <name>Freddy Galvis</name> 
     <position>Shortstop</position> 
     <bats>Switch</bats> 
     <throws>Right</throws> 
     <year2012> 
     <games>58</games> 
     <pa>200</pa> 
     <ab>190</ab> 
     <runs>14</runs> 
     <hits>43</hits> 
     <doubles>15</doubles> 
     <triples>1</triples> 
     <hr>3</hr> 
     <rbi>24</rbi> 
     <sb>0</sb> 
     <cs>0</cs> 
     <bb>7</bb> 
     <so>29</so> 
     <ba>.229</ba> 
     </year2012> 
     <year2013> 
     <games>70</games> 
     <pa>222</pa> 
     <ab>205</ab> 
     <runs>13</runs> 
     <hits>48</hits> 
     <doubles>5</doubles> 
     <triples>4</triples> 
     <hr>6</hr> 
     <rbi>19</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>13</bb> 
     <so>45</so> 
     <ba>.234</ba> 
     </year2013> 
     <year2014> 
     <games>43</games> 
     <pa>128</pa> 
     <ab>119</ab> 
     <runs>14</runs> 
     <hits>21</hits> 
     <doubles>3</doubles> 
     <triples>1</triples> 
     <hr>4</hr> 
     <rbi>12</rbi> 
     <sb>1</sb> 
     <cs>0</cs> 
     <bb>8</bb> 
     <so>30</so> 
     <ba>.176</ba> 
     </year2014> 
     <year2015> 
     <games>151</games> 
     <pa>603</pa> 
     <ab>559</ab> 
     <runs>63></runs> 
     <hits>147</hits> 
     <doubles>14</doubles> 
     <triples>5</triples> 
     <hr>7</hr> 
     <rbi>50</rbi> 
     <sb>10</sb> 
     <cs>1</cs> 
     <bb>30</bb> 
     <so>103</so> 
     <ba>.241</ba> 
     </year2015> 
     <year2016> 
     <games>158</games> 
     <pa>624</pa> 
     <ab>584</ab> 
     <runs>61</runs> 
     <hits>141</hits> 
     <doubles>26</doubles> 
     <triples>3</triples> 
     <hr>20</hr> 
     <rbi>67</rbi> 
     <sb>17</sb> 
     <cs>6</cs> 
     <bb>25</bb> 
     <so>136</so> 
     <ba>.241</ba> 
     </year2016> 
    </player> 
    </phillies> 

: 그리고 여기에 XML 코드 마지막으로

package com.grim.baseballvisualizer; 

import java.io.File; 
import java.io.IOException; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 

public class XMLParser { 

    public static NodeList parseXML(String file) { 

     File xmlFile = new File("howard.xml"); 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     try { 
      DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
      Document document = documentBuilder.parse(xmlFile); 
      NodeList names = document.getElementsByTagName("name"); 
      return names; 
     } 
     catch (ParserConfigurationException e) { 

      e.printStackTrace(); 
     } 
     catch (SAXException e) { 

      e.printStackTrace(); 
     } 
     catch (IOException e) { 

      e.printStackTrace(); 
     } 
     return null; 



    } 

} 

, 나는 Xpath는 parseXml 함수를 호출하는 JSP 프로그램이 다음 난을 쓰고 싶어 나머지 코드는 실제로 데이터를 시각화합니다. 그러나, 내가 가지고있는 문제는 "names"를 반환하면 xml 파일에 "name"의 인스턴스가 여러 개 있지만 null이 반환됩니다.

+0

스택 트레이스가 생성됩니까? 그런 출력이 나타날 로그 파일을 확인 했습니까? –

+0

아무 것도하지 않는 것 같습니다. 그것은 단지 내 화면에 null을 말합니다. –

+0

XML 파일은 어디에 두시겠습니까? JSP가 파서에 '파일'로 정확히 전달하는 것은 무엇입니까? –

답변

1

코드를 수정하여 실행 파일로 만들고 샘플 입력 파일에서 실행하면 작동합니다. null이 아닌 NodeList을 리턴합니다.

[email protected] 

이 무엇을 실제로 경우에 일어나고있는 것은 다음 중 하나 이상임을 알려줍니다 다음

  1. 실제로을 실행하는 것은 당신이 보여준 것과 크게 다른 코드 를 우리.

  2. 입력 파일이 다릅니다.

  3. 실제로 스택 트레이스가 표시되지만 표준 출력 중 하나가 삭제되거나 찾고 있지 않은 곳 (예 : 로그 파일)으로 전송됩니다. 당신이 가진 문제를 계속하는 경우

내 돈 3


에있을 것입니다, 당신은 java 명령을 사용하여 직접 실행할 수있는 무언가를 내려 스트립, 파싱 코드를 복용 시도하고 당신이 얻는 것을보십시오.

0

코드에 문제가 없습니다. nodelist가 당신이 원하는 것과 일치하는 것을 증명하는 작은 테스트 코드가 있습니다.

private static void testNodeList(NodeList names){ 
    for(int i = 0; i < names.getLength(); i++){ 
     System.out.println(names.item(i).getTextContent()); 
    } 
}