/**
?*?得到XML文件屬性的集合對象
?*? @param ?xmlDoc?XML對象
?*? @param ?name?屬性名稱?如:?user
?*? @return ?返回?Array?對象
?*?Example?XML:
?*?<?xml?version='1.0'?encoding='utf-8'?>
?*?<ekuy>
?*???<user>
?*?????<name>
?*???????<cnname>小豬</cnname>
?*?????</name>
?*?????<age>27</age>
?*???</user>
?*???<user>
?*?????<name>
?*???????<cnname>小霞</cnname>
?*?????</name>
?*?????<age>26</age>
?*???</user>
?*?</ekuy>
? */
function?getXMLArray(xmlDoc,?name)?{
??var?keys? = ?name.split( ' . ' );
??var?node? = ?xmlDoc.documentElement;?????? // ?得到根節點
??var?rtn? = ? new ?Array();
??var?n? = ? 0 ;
?? for (var?i = 0 ;?i < keys.length;?i ++ )?{
????var?childs? = ?node.childNodes;??????? // ?得到子節點
????var?key? = ?keys[i];
? for (var?k = 0 ;?k < childs.length;?k ++ )?{??????
???var?child? = ?childs[k];
??? if (child.nodeName? == ?key)?{????? // ?判斷子節點是否符合
?? if (i? == ?keys.length - 1 )?{
??????????rtn[n]? = ?child;
????n ++ ;
??}? else ?{
????node? = ?child;
???? break ;
??}
???}
?}
??}
?? return ?rtn;
}
/**
?*?得到由getXMLArray函數得到對象中的值
?*? @param ?node?節點對象
?*? @param ?name?
?*? @return ?返回?String?
? */
function?getValue(node,?name)?{
??var?keys? = ?name.split( ' . ' );
??
?? for (var?i = 0 ;?i < keys.length;?i ++ )?{
????var?childs? = ?node.childNodes;??????? // ?得到子節點
????var?key? = ?keys[i];
? for (var?k = 0 ;?k < childs.length;?k ++ )?{??????
???var?child? = ?childs[k];
??? if (child.nodeName? == ?key)?{????? // ?判斷子節點是否符合
?? if (child.childNodes.length? == ? 1 )?{?????????
???? // ?如果沒有字節點,返回值
???? return ?child.text;
??}? else ?{?????????????????????????????????
???? // ?還有子節點,繼續分析
????node? = ?child;
???? break ;
??}
???}
?}
??}
?? return ? "" ;
}
// ?測試:
var?xmlDoc? = ? new ?ActiveXObject( " Microsoft.XMLDOM " );
xmlDoc.async? = ? false ;
xmlDoc.loadXML( " <?xml?version='1.0'?encoding='utf-8'?><ekuy><user><name><cnname>小豬</cnname></name><age>27</age></user><user><name><cnname>小霞</cnname></name><age>26</age></user><user><name><cnname>小章</cnname></name><age>25</age></user></ekuy> " );
var?list? = ?getXMLArray(xmlDoc,? ' user ' );
for (var?i = 0 ;?i < list.length;?i ++ )?{
??var?obj? = ?list[i];
??document.write(getValue(obj,? ' name.cnname ' ));
??document.write(getValue(obj,? ' age ' ));
??document.write( ' <br\/> ' );
}
?*?得到XML文件屬性的集合對象
?*? @param ?xmlDoc?XML對象
?*? @param ?name?屬性名稱?如:?user
?*? @return ?返回?Array?對象
?*?Example?XML:
?*?<?xml?version='1.0'?encoding='utf-8'?>
?*?<ekuy>
?*???<user>
?*?????<name>
?*???????<cnname>小豬</cnname>
?*?????</name>
?*?????<age>27</age>
?*???</user>
?*???<user>
?*?????<name>
?*???????<cnname>小霞</cnname>
?*?????</name>
?*?????<age>26</age>
?*???</user>
?*?</ekuy>
? */
function?getXMLArray(xmlDoc,?name)?{
??var?keys? = ?name.split( ' . ' );
??var?node? = ?xmlDoc.documentElement;?????? // ?得到根節點
??var?rtn? = ? new ?Array();
??var?n? = ? 0 ;
?? for (var?i = 0 ;?i < keys.length;?i ++ )?{
????var?childs? = ?node.childNodes;??????? // ?得到子節點
????var?key? = ?keys[i];
? for (var?k = 0 ;?k < childs.length;?k ++ )?{??????
???var?child? = ?childs[k];
??? if (child.nodeName? == ?key)?{????? // ?判斷子節點是否符合
?? if (i? == ?keys.length - 1 )?{
??????????rtn[n]? = ?child;
????n ++ ;
??}? else ?{
????node? = ?child;
???? break ;
??}
???}
?}
??}
?? return ?rtn;
}
/**
?*?得到由getXMLArray函數得到對象中的值
?*? @param ?node?節點對象
?*? @param ?name?
?*? @return ?返回?String?
? */
function?getValue(node,?name)?{
??var?keys? = ?name.split( ' . ' );
??
?? for (var?i = 0 ;?i < keys.length;?i ++ )?{
????var?childs? = ?node.childNodes;??????? // ?得到子節點
????var?key? = ?keys[i];
? for (var?k = 0 ;?k < childs.length;?k ++ )?{??????
???var?child? = ?childs[k];
??? if (child.nodeName? == ?key)?{????? // ?判斷子節點是否符合
?? if (child.childNodes.length? == ? 1 )?{?????????
???? // ?如果沒有字節點,返回值
???? return ?child.text;
??}? else ?{?????????????????????????????????
???? // ?還有子節點,繼續分析
????node? = ?child;
???? break ;
??}
???}
?}
??}
?? return ? "" ;
}
// ?測試:
var?xmlDoc? = ? new ?ActiveXObject( " Microsoft.XMLDOM " );
xmlDoc.async? = ? false ;
xmlDoc.loadXML( " <?xml?version='1.0'?encoding='utf-8'?><ekuy><user><name><cnname>小豬</cnname></name><age>27</age></user><user><name><cnname>小霞</cnname></name><age>26</age></user><user><name><cnname>小章</cnname></name><age>25</age></user></ekuy> " );
var?list? = ?getXMLArray(xmlDoc,? ' user ' );
for (var?i = 0 ;?i < list.length;?i ++ )?{
??var?obj? = ?list[i];
??document.write(getValue(obj,? ' name.cnname ' ));
??document.write(getValue(obj,? ' age ' ));
??document.write( ' <br\/> ' );
}