作為一名專欄作家,我的目標并不是報導新聞、或是向讀者提供一份不斷更新的專家投資建議。相反我認為,有些金融投資指南是放之四海皆準的,因此我會反復加以琢磨。
其中有些投資建議是我經常掛在嘴邊的,而另一些是最近突然閃現在我的腦海里。想更好地管理你的資金嗎?我在這里向您提供九條最重要的理財法則。
1)勇于說“不”
為了成功地進行儲蓄和投資,沒什么比自律更重要了。
這意味著看準一些股票、債券和貨幣市場基金后進行投資,然后堅持持有這一投資組合,無論動蕩的市場是多么令人煩惱不安,也無論你是多么想購買最新的熱門股。
更重要的是,你不能輕易自滿,因此可進行適量的定期儲蓄。
2)別患上享樂適應癥
花錢并不能給你帶來快樂。然而許多人都這么做,于是他們一生都要面對高額的信用卡帳單,以及失望的情緒。
知道這個心理循環嗎?你看中了某件商品,然后認定非要得到它不可,于是付帳。然而幾周或幾個月之后,你就把這件事忘得一干二凈,又開始新的物質追求了。
學者們把這種現象稱為“快樂水車”或“享樂適應癥”(hedonic treadmill)。從中可以吸取的教訓是什么呢?如果你想得到快樂,別到購物中心去尋找,那里是找不到的。
3)我們就是市場
盡管大家都在談論跑贏大市,但事實上我們的前進道路上存在著一個不可逾越的障礙。
不可能所有的人都跑贏大市,因為我們本身就是市場的組成部份。如果有人跑贏大市,那么必然有人被市場打敗。
實際上,如果再算上投資成本,能跑贏大市的投資者就寥寥無幾了,而大多數投資者都落后于市場平均水平。
4)誰分了你的錢
還有一點你得記住,不管你是否樂意,你還有兩位投資伙伴:華爾街和收稅員。你們三個人共同分配你的投資收益。
想自己多留一點,給華爾街和收稅員少點?最好的辦法是降低投資成本,同時最大限度地利用避稅的退休金帳戶。
5)請專家幫忙
十年前,我認為大多數投資者有能力自己進行投資。如今,我可不這么想了。
看上去大多數投資者是沒有時間、興趣和精力親自進行成功的投資的。
不過遺憾的是,即使你聘請了經紀人或是理財規劃師,你的感覺也好不了多少。許多顧問收費昂貴,但他們自己也只有少得可憐的正規理財教育,因此你在挑選顧問的時候得特別小心。
6)別落在后面
當專家們討論投資多樣化的時候,他們會指出,購買各種投資產品能降低投資風險,因為其中一些投資會帶來收益,而另一些會出現虧損。
但問題在于:每當我們面臨重大金融危機的時候,投資多樣化──特別在全球股票市場上進行多樣化的投資──常常被證明是起不了什么作用的,因為所有的股票都在暴跌。
不過我覺得這種想法忽略了關鍵要點。即使美國股票和海外股票一同漲跌,它們的年投資回報還是存在著驚人的差距。那些僅僅投資于一個市場的投資者們可能會面臨較長的低迷時期。
此外,投資多樣化也不僅僅是為了減少投資組合的短期波動。你還想限制金融災難給你帶來的損失,無論是因為政局動蕩而導致金融市場出現混亂,還是金融市場本身出現崩潰,例如上世紀九十年代的日本市場。
7)家庭很重要
孩子是你的繼承人。他們將繼承你的資產,也極有可能接受你的理財觀念。
你的家庭是你最大的資產,同時也是最大的負債。如果你的孩子或父母陷入了財務困境,你將伸出援手。同樣,在你碰到困難時,他們也會伸出援手。
記住這些很重要。可以與你的父母談談他們的財務狀況,也可以教導孩子們如何理財。
想想你自己是如何管理財產的吧,特別是想想當出現問題時,它們會給家庭帶來什么影響。
8)進行長期投資
如果你年紀輕輕就離開人世,這對你的配偶和孩子來說是沉重的打擊。但是請別忽略了其他風險:如果你活得遠比預計的長呢?
許多退休人士非常擔心英年早逝,因此他們急著申請社會保障金,而拒絕購買終生年金。如果你確信自己和配偶生命短暫的話,采取這樣的策略是正確的,至少你活著的時候手頭充裕。
然而,如果你早早地領取了社會保障金,而且也不購買年金,但實際卻活得很長呢?那你就得一分一厘地算著花錢了。
9)最后一根稻草
在金融市場開盤的交易日里,我通常每隔幾小時就會查看與通貨膨脹掛鉤的國債的收益率。
在我看來,與通貨膨脹掛鉤的國債可作為其他所有投資的基準。如果我購買了十年期通貨膨脹掛鉤國債,我在今后十年內獲得的投資收益將比通貨膨脹率高2.3個百分點。
除非我確信其他投資的表現優于這一基準,否則我將繼續持有十年期通貨膨脹掛鉤國債。在我看來,這項投資是我的最后一根救命稻草。
版權所有,轉載請注明,來自www.jialing.net這個在市井街頭上演的真實故事近日通過上海某投資管理公司老總的個人博客在網上廣泛流傳,成為大家津津樂道的話題。看完這個故事,很多人或許都會想,同樣都是賣書報雜志的,為什么差別會那么大呢?
這個小販的故事,給我們提出了一個命題,在給定的外部環境、產業空間、成本產出比的條件下,如何獲得超過同行業平均水平的回報?在這個案例中,報販的選擇是改變商業模式,將原有的終端書報發行模式從“零售”改變為“出租”,從而將獲利機制中的“銷售利潤”轉換成“出租利潤”。由于每個報攤本來每月就有冗余產品的沉淀,出租成本幾乎為零,而市場吸引力又遠大于銷售,因此具備了成功的基礎。此外,由于每個客戶還要交20元押金,這樣上百人的押金又成為報販手中的一筆可流動資金,相當于無息貸款。用這筆錢可以繼續投入運營,比如根據客戶需求引進品種更多的書報商品,擴大自己的產品競爭力。
很多人或許會想,這樣模式設計并不難,為什么只有這個報販做成了呢?除了人家腳踏實地敢于實踐之外,可能還有細節方面不為人知的控制能力。網文雖未對此作更多描述,但我們可以設想,比如他可能會向客戶推薦介紹近期的熱點事件、精彩新聞,提供信息增值服務,他還可能會用短信提醒一些平時太忙的客戶他要的雜志到了,提供“閱讀小秘書”之類的服務。類似的這些增值服務,都可以提高“出租”模式的核心競爭力,讓客戶得到更多回報,從而保證了新商業模式的運行。
從為微軟MBA上課的出租車司機,到月入8000的報販,他們都在做一件很多人都在做的普通事情上,走出了自己的新路,也獲得了超過他人的回報。比起深奧的教科書,這樣的民間智慧或許是大多數平凡的創業者更需要學習的。
最近,單位附近一家飯店生意火爆,原因之一是推出了一項別人沒有的簡單優惠。這家飯店規定,等候20分鐘以上的顧客可以全單打八折,等候10分鐘的可以打九折,而在晚上6點半以前離開飯店的客人也可以打八折。如此一來,餐桌的翻臺率大大提高,愿意等的人數量也大大增加,小小的折扣杠桿為這家店撬動了更大的市場。
來自草根的管理智慧到處都是,只需要我們睜大眼睛。
中文資源轉換成utf-8編碼Parsing XML
或許你想要做的第一件事情就是解析一個某種類型的XML文檔,用dom4j很容易做到。請看下面的示范代碼:
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Foo {
public Document parse(URL url) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(url);
return document;
}
}
使用迭代器(Iterators)
我們可以通過多種方法來操作XML文檔,這些方法返回java里標準的迭代器(Iterators)。例如:
public void bar(Document document) throws DocumentException {
Element root = document.getRootElement();
//迭代根元素下面的所有子元素
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
//處理代碼
}
//迭代根元素下面名稱為"foo"的子元素
for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
Element foo = (Element) i.next();
//處理代碼
}
// 迭代根元素的屬性attributes)元素
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
}
強大的XPath導航
在dom4j中XPath可以表示出在XML樹狀結構中的Document或者任意的節點(Node)(例如:Attribute,Element 或者 ProcessingInstruction等)。它可以使在文檔中復雜的操作僅通過一行代碼就可以完成。例如:
public void bar(Document document) {
List list = document.selectNodes( "http://foo/bar" );
Node node = document.selectSingleNode( "http://foo/bar/author" );
String name = node.valueOf( "@name" );
}
如果你想得到一個XHTML文檔中的所有超文本鏈接(hypertext links)你可以使用下面的代碼:
public void findLinks(Document document) throws DocumentException {
List list = document.selectNodes( "http://a/@href" );
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
Attribute attribute = (Attribute) iter.next();
String url = attribute.getValue();
}
}
如果你需要關于XPath語言的任何幫助,我們強烈推薦這個站點Zvon tutorial他會通過一個一個的例子引導你學習。
快速遍歷(Fast Looping)
如果你不得不遍歷一個非常大的XML文檔,然后才去執行,我們建議你使用快速遍歷方法(fast looping method),它可以避免為每一個循環的節點創建一個迭代器對象,如下所示:
public void treeWalk(Document document) {
treeWalk( document.getRootElement() );
}
public void treeWalk(Element element) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
treeWalk( (Element) node );
}
else {
// do something....
}
}
}
生成一個新的XML文檔對象
在dom4j中你可能常常希望用程序生成一個XML文檔對象,下面的程序為你進行了示范:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "root" );
Element author1 = root.addElement( "author" )
.addAttribute( "name", "James" )
.addAttribute( "location", "UK" )
.addText( "James Strachan" );
Element author2 = root.addElement( "author" )
.addAttribute( "name", "Bob" )
.addAttribute( "location", "US" )
.addText( "Bob McWhirter" );
return document;
}
}
將一個文檔對象寫入文件中
將一個文檔對象寫入Writer對象的一個簡單快速的途徑是通過write()方法。
FileWriter out = new FileWriter( "foo.xml" );
document.write( out );
如果你想改變輸出文件的排版格式,比如你想要一個漂亮的格式或者是一個緊湊的格式,或者你想用Writer 對象或者OutputStream 對象來操作,那么你可以使用XMLWriter 類。
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Foo {
public void write(Document document) throws IOException {
// 寫入文件
XMLWriter writer = new XMLWriter(
new FileWriter( "output.xml" )
);
writer.write( document );
writer.close();
// 以一種優雅的格式寫入System.out對象
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter( System.out, format );
writer.write( document );
// 以一種緊湊的格式寫入System.out對象
format = OutputFormat.createCompactFormat();
writer = new XMLWriter( System.out, format );
writer.write( document );
}
}
轉化為字符串,或者從字符串轉化
如果你有一個文檔(Document)對象或者任何一個節點(Node)對象的引用(reference),象屬性(Attribute)或者元素(Element),你可以通過asXML()方法把它轉化為一個默認的XML字符串:
Document document = ...;
String text = document.asXML();
如果你有一些XML內容的字符串表示,你可以通過DocumentHelper.parseText()方法將它重新轉化為文檔(Document)對象:
String text = "
Document document = DocumentHelper.parseText(text);
通過XSLT樣式化文檔(Document)
使用Sun公司提供的JAXP API將XSLT 應用到文檔(Document)上是很簡單的。它允許你使用任何的XSLT引擎(例如:Xalan或SAXON等)來開發。下面是一個使用JAXP創建一個轉化器(transformer),然后將它應用到文檔(Document)上的例子:
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
public class Foo {
public Document styleDocument(
Document document,
String stylesheet
) throws Exception {
// 使用 JAXP 加載轉化器
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(
new StreamSource( stylesheet )
);
// 現在來樣式化一個文檔(Document)
DocumentSource source = new DocumentSource( document );
DocumentResult result = new DocumentResult();
transformer.transform( source, result );
// 返回經過樣式化的文檔(Document)
Document transformedDoc = result.getDocument();
return transformedDoc;
}
}
初次嘗試翻譯,如果有翻譯不妥的地方,希望大家指出來,我們共同進步!
謝謝!!
[:)]
1. 介紹
1)DOM(JAXP Crimson解析器)
DOM是用與平臺和語言無關的方式表示XML文檔的官方W3C標準。DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構,然后才能做任何工作。由于它是基于信息層次的,因而DOM被認為是基于樹或基于對象的。DOM以及廣義的基于樹的處理具有幾個優點。首先,由于樹在內存中是持久的,因此可以修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像SAX那樣是一次性的處理。DOM使用起來也要簡單得多。
2)SAX
SAX處理的優點非常類似于流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由于應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對于大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。
選擇DOM還是選擇SAX? 對于需要自己編寫代碼來處理XML文檔的開發人員來說, 選擇DOM還是SAX解析模型是一個非常重要的設計決策。 DOM采用建立樹形結構的方式訪問XML文檔,而SAX采用的事件模型。
DOM解析器把XML文檔轉化為一個包含其內容的樹,并可以對樹進行遍歷。用DOM解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然后利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內存的要求比較高,尤其是遇到很大的XML文件的時候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務中。
SAX解析器采用了基于事件的模型,它在解析XML文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標簽已經找到。SAX對內存的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文檔中所包含的部分數據時,SAX這種擴展能力得到了更好的體現。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數據。
3)JDOM http://www.jdom.org
JDOM的目的是成為Java特定文檔模型,它簡化與XML的交互并且比使用DOM實現更快。由于是第一個Java特定模型,JDOM一直得到大力推廣和促進。正在考慮通過“Java規范請求JSR-102”將它最終用作“Java標準擴展”。從2000年初就已經開始了JDOM開發。
JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經熟悉這些類的Java開發者的使用。
JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問題”(根據學習曲線假定為20%)。JDOM對于大多數Java/XML應用程序來說當然是有用的,并且大多數開發者發現API比DOM容易理解得多。JDOM還包括對程序行為的相當廣泛檢查以防止用戶做任何在XML中無意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯誤)。這也許是比學習DOM或JDOM接口都更有意義的工作。
JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗證輸入XML文檔(盡管它還可以將以前構造的DOM表示作為輸入)。它包含一些轉換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發布的開放源碼。
4)DOM4J http://dom4j.sourceforge.net
雖然DOM4J代表了完全獨立的開發結果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構建文檔表示的選項,它通過DOM4J API和標準DOM接口具有并行訪問功能。從2000下半年開始,它就一直處于開發之中。
為支持所有這些功能,DOM4J使用接口和抽象基本類方法。DOM4J大量使用了API中的Collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復雜的API的代價,但是它提供了比JDOM大得多的靈活性。
在添加靈活性、XPath集成和對大文檔處理的目標時,DOM4J的目標與JDOM是一樣的:針對Java開發者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實現在本質上處理所有Java/XML問題的目標。在完成該目標時,它比JDOM更少強調防止不正確的應用程序行為。
DOM4J是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML,特別值得一提的是連Sun的JAXM也在用DOM4J。
2.. 比較
1)DOM4J性能最好,連Sun的JAXM也在用DOM4J。目前許多開源項目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J.
2)JDOM和DOM在性能測試時表現不佳,在測試10M文檔時內存溢出。在小文檔情況下還值得考慮使用DOM和JDOM。雖然JDOM的開發者已經說明他們期望在正式發行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM仍是一個非常好的選擇。DOM實現廣泛應用于多種編程語言。它還是許多其它與XML相關的標準的基礎,因為它正式獲得W3C推薦(與基于非標準的Java模型相對),所以在某些類型的項目中可能也需要它(如在JavaScript中使用DOM)。
3)SAX表現較好,這要依賴于它特定的解析方式-事件驅動。一個SAX檢測即將到來的XML流,但并沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。
3. 四種xml操作方式的基本使用方法
xml文件:
<?xml version="1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>四川省XX縣XX鎮XX路X段XX號</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>四川省XX市XX鄉XX村XX組</ADDR>
</VALUE>
</RESULT>
1)DOM
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class MyXMLReader{
public static void main(String arge[]){
long lasting =System.currentTimeMillis();
try{
File f=new File("data_10k.xml");
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i=0;i<nl.getLength();i++){
System.out.print("車牌號碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println("車主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
}
}catch(Exception e){
e.printStackTrace();
}
2)SAX
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
public class MyXMLReader extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public MyXMLReader() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader reader = new MyXMLReader();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("運行時間:" + (System.currentTimeMillis() - lasting) + "毫秒");}
public void characters(char ch[], int start, int length) throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.print("車牌號碼:" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println("地址:" + new String(ch, start, length));
}
}
public void startElement(String uri,String localName,String qName,Attributes attrs) {
tags.push(qName);}
}
3) JDOM
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class MyXMLReader {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("data_10k.xml"));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for(int i=0;i<allChildren.size();i++) {
System.out.print("車牌號碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());
System.out.println("車主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
4)DOM4J
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class MyXMLReader {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
File f = new File("data_10k.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Element foo;
for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
foo = (Element) i.next();
System.out.print("車牌號碼:" + foo.elementText("NO"));
System.out.println("車主地址:" + foo.elementText("ADDR"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
轉自:http://blog.dl.net.cn/xd/3/archives/2005/15.html
1.文檔對象模型(DOM)
DOM是HTML和XML文檔的編程基礎,它定義了處理執行文檔的途徑。
我的xml文件Login.xml如下.
<?xml?version="1.0"?encoding="utf-8"??>
<Login>
????<Character>
????????<C?Text="熱血"?Value="0"></C>
????????<C?Text="弱氣"?Value="1"></C>
????????<C?Text="激情"?Value="2"></C>
????????<C?Text="冷靜"?Value="3"></C>
????????<C?Text="冷酷"?Value="4"></C>
????</Character>
????<Weapon>
????????<W?Text="光束劍"?Value="0"></W>
????????<W?Text="光束配刀"?Value="1"></W>
????</Weapon>
????<EconomyProperty>
????????<P?Text="平均型"?Value="0"></P>
????????<P?Text="重視攻擊"?Value="1"></P>
????????<P?Text="重視敏捷"?Value="2"></P>
????????<P?Text="重視防御"?Value="3"></P>
????????<P?Text="重視命中"?Value="4"></P>
????</EconomyProperty>
</Login>
現在我需要對這個xml文件的內容進行操作.
首先,我們需要加載這個xml文件,js中加載xml文件,是通過XMLDOM來進行的.
//?加載xml文檔
loadXML????=?function(xmlFile)
{
????var?xmlDoc;
????if(window.ActiveXObject)
????{
????????xmlDoc????=?new?ActiveXObject(’Microsoft.XMLDOM’);
????????xmlDoc.async????=?false;
????????xmlDoc.load(xmlFile);
????}
????else?if?(document.implementation&&document.implementation.createDocument)
????{
????????xmlDoc????=?document.implementation.createDocument(’’,?’’,?null);
????????xmlDoc.load(xmlFile);
????}
????else
????{
????????return?null;
????}
????
????return?xmlDoc;
}
xml文件對象出來了,?接下去我就要對這個文檔進行操作了.
比如說,我們現在需要得到節點Login/Weapon/W的第一個節點的屬性,那么我們可以如下進行.
本文由 點擊設計 http://www.djasp.Net 收集整理。謝絕無聊之人轉載!
//?首先對xml對象進行判斷
checkXMLDocObj????=?function(xmlFile)
{
????var?xmlDoc????=?loadXML(xmlFile);
????if(xmlDoc==null)
????{
????????alert(’您的瀏覽器不支持xml文件讀取,于是本頁面禁止您的操作,推薦使用IE5.0以上可以解決此問題!’);
????????window.location.href=’/Index.aspx’;
????}
????
????return?xmlDoc;
}
★點擊設計★ http://www.djasp.Net 全力打造WEB技術站點,歡迎大家訪問!
//?然后開始獲取需要的Login/Weapon/W的第一個節點的屬性值
var?xmlDoc????=?checkXMLDocObj(’/EBS/XML/Login.xml’);
var?v????=?xmlDoc.getElementsByTagName(’Login/Weapon/W’)[0].childNodes.getAttribute(’Text’)
而我在我的程序中的寫法是這樣子的,當然我在程序中的寫法是已經應用到實際中的了.一并給出來,以供查看
本文由 ★點擊設計★ http://www.djasp.Net 收集整理。謝絕無聊之人轉載!
initializeSelect????=?function(oid,?xPath)
{
????var?xmlDoc????=?checkXMLDocObj(’/EBS/XML/Login.xml’);
????var?n;
????var?l;
????var?e????=?$(oid);
????if(e!=null)
????{
????????n????=?xmlDoc.getElementsByTagName(xPath)[0].childNodes;
????????l????=?n.length;
????????for(var?i=0;?i<l;?i++)
????????{
????????????var?option????=?document.createElement(’option’);
????????????option.value????=?n[i].getAttribute(’Value’);
????????????option.innerHTML????=?n[i].getAttribute(’Text’);
????????????e.appendChild(option);
????????}
????}
}
上面的訪問代碼中,我們是通過xmlDoc.getElementsByTagName(xPath)來進行的.
還可以通過xmlDoc.documentElement.childNodes(1)..childNodes(0).getAttribute(’Text’)進行訪問.
一些常用方法:
xmlDoc.documentElement.childNodes(0).nodeName,可以得到這個節點的名稱.
xmlDoc.documentElement.childNodes(0).nodeValue,可以得到這個節點的值.?這個值是來自于這樣子的xml格式:<a>b</b>,?于是可以得到b這個值.
xmlDoc.documentElement.childNodes(0).hasChild,可以判斷是否有子節點
盜版它人網站的內容可恥,您查看的內容來源于★點擊設計★www.djasp.Net
根據我的經驗,最好是使用getElementsByTagName(xPath)的方法對節點進行訪問,因為這樣子可以直接通過xPath來定位節點,這樣子會有更好的性能.