java web複習日記 day01

        博主是一個大四學生,於大二下學期和大三上學期自學java web,後在大三下和大四上因爲考研荒廢了很多技術知識,前段時間公佈分數後沒有考上研究生。於是決定利用20天的時間複習之前學習的java web知識,希望能趕上各學校春招的末班車。現在開此博客記錄學習過程。

        因爲之前學習時看的是傳智播客方老師的視頻,感覺很不錯,於是這次準備重新看一遍。

       

------------------------------------------------------正文分割------------------------------------------------------------------

       剛纔在看關於xml的知識,因爲本科學習了html,所以感覺毫不費勁,只是中間出現了一個小插曲,.dtd約束文檔必須保存爲utf-8或者unicode格式的才能正確使用,不然會提示非法字符的警告。方老師自己寫的xml解析工具(基於Mircosoft.XMLDOM)應該也可以被淘汰了,僅對ie有用,不過有點強迫症把代碼粘貼如下:

(注:以下代碼寫在head標籤中)

<!--創建xml文檔解析器對象 -->
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
<!--開啓xml校驗-->
xmldoc.validateOnParse = "true";
<!--裝載xml文檔-->
xmldoc.load("book.xml");
<!--獲取打印錯誤信息-->
document.write(xmldoc.parseError.reason);  
document.write(xmldoc.parseError.line); 

   看完視頻發現dtd也過時了,學習目標就是能對照對着w3school的文檔寫出正確的xml,知識點就是屬性,實體設計,沒啥特別的。

    接下來就是XML的解析方式,視頻裏講的是DOM和SAX,其中最大的區別就是SAX解析速度快,對內存佔用少,只適合來查找數據,修改刪除添加都不行,dom實現crud很方便,但是不適於大文件.XML解析器最騷的就是dom4j。

    第一天的任務是根據老師做的部分項目,做出完整項目,就是jaxp的增刪查,查找的時候出了點問題,Node的getChildNodes()方法會因爲XML文檔不同子節點間換行而取到#text這個節點,很奇怪,而且我的程序一直無法取出節點的值。先把它貼出來,看有沒有大神能看見,幫忙解答。

public Student find(String examid) throws ParserConfigurationException, SAXException, IOException{
		Document document = XmlUtils.getDoucment();
		NodeList list = document.getElementsByTagName("student");
		int index = -1;
		for(int i=0;i<list.getLength();i++){
			if(list.item(i).getAttributes().getNamedItem("examid").getNodeValue().equals(examid)){
				index = i;//可以改爲getAttribute("examid");
			}
		}
		NodeList childNodes = list.item(index).getChildNodes();
                //取孩子節點的可以直接list.utem(index).getElementsByTagName("name");等等 
                String name = childNodes.item(0).getNodeValue();
		String location = childNodes.item(1).getNodeValue();
		double grade = Double.parseDouble(childNodes.item(2).getNodeValue());
               //這三處的getNodeValue()換成getTextContent()就OK了
                String idcard = list.item(index).getAttributes().getNamedItem("idcard").getNodeValue();
		//System.out.println(name);
		Student student = new Student();
		student.setName(name);
		student.setGrade(grade);
		student.setLocation(location);
		student.setIdcard(idcard);
		return student;
	}

       今天還是很充實的,很晚了,睡覺啦。

-------------------------------------十分鐘後修訂

剛纔因爲沒解決問題很不爽,不能恥辱下機,於是乎又找了找問題的所在,終於找到了解決方法,原來

getNodeValue()和getTextContent()的區別是出問題的地方!!!!!!!

前者對於Node中的getNodeValue()方法只對Attribute,Text,Comment,CDATA等節點有意義,其他取出來都是null而getTextContent()方法則返回此節點及其後代的文本內容

終於明白了,氣死我了,但是還是積累頗多!

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章