當前位置:首頁 » 網頁前端 » 前端如何獲取xml
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端如何獲取xml

發布時間: 2022-04-27 10:02:28

A. js怎麼獲取xml里某個節點的值並輸出

1、用 childNodes 屬性,按順序取

實現過程:首先創建一個 xml 對象,然後載入 xml 文件,再根據待取節點父節點在 xml 文件中的序號和本身的序號,確定待取節點的位置,最後返回待取節點的值。

//pId 待取節點父節點序號
//cId 待取節點序號

functiongetXmlNodeValue(pId,cId){
varxmlDoc=newActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("employeeInfo.xml");
varnodes=xmlDoc.documentElement.childNodes[pId].childNodes[cId];returnnodes.childNodes[0].text;
}

調用方法:alert(getXmlNodeValue(1, 2));


2、用 for 循環來取

實現過程:首先創建一個 ie 支持的xml 對象,如果發生異常,是創建一個 FireFox 支持的空 xml 對象並返回空;然後載入 xml 文件,如要發生異常也返回空;最後,通過 for 循環遍歷查找與傳入的節點值相同的節點,找到後返回屬於該節點的屬性值。

//nodeValue 待取節點的所屬節點值

functiongetXmlNodeValueFor(nodeValue){
varxmlDoc;
try{
//創建一個ie支持的XML文檔對象
xmlDoc=newActiveXObject("Microsoft.XMLDOM");
}catch(e){
try{
//創建FireFox空的XML文檔對象
xmlDoc=document.implementation.createDocument("","",null);
}catch(e){
alert(e.message);
return"";
}
}
xmlDoc.async=false;
try{
xmlDoc.load("employeeInfo.xml");
}catch(e){
alert(e.message);
return"";
}
varxd=xmlDoc.documentElement.childNodes;
if(xd==null)
return"";
vartempValue;
for(vari=0;i<xd.length;i++){
if(xd[i].childNodes[0].childNodes[0].nodeValue==nodeValue)tempValue=xd[i].childNodes[2].childNodes[0].nodeValue;
}
returntempValue;
}

調用方法:alert(getXmlNodeValueFor("王佳琳"));

B. jquery如何獲取xml指定值

一般步驟如下:

1. 讀取xml文件

$.get("xmlfile.xml",function(xml){
//xml即為可以讀取使用的內容,具體讀取見第2點
});

2. 讀取xml內容

如果讀取的xml是來於xml文件,這結合上面的那點,處理如下:

$.get("xmlfile.xml",function(xml){
$(xml).find("item").length;
});

如果讀取的是xml字元串,則要注意一點,xml字元串的必然被"<xml>"和"</xml>"包圍才可以被解析

$("<xml><root><item></item></root></xml>").find("item").length;

解析xml內容:

示例xml:

<?xmlversion="1.0"encoding="utf-8"?>
<fields>
<fieldName="Name1">
<fieldname>dsname</fieldname>
<datatype>字元</datatype>
</field>
<fieldName="Name2">
<fieldname>dstype</fieldname>
<datatype>字元</datatype>
</field>
</fields>

以下是解析示例代碼:

$(xml).find("field").each(function(){
varfield=$(this);
varfName=field.attr("Name");//讀取節點屬性
vardataType=field.find("datatype").text();//讀取子節點的值
});

//查找指定field的值(第一個field的值)
$(xml).find("field:eq(0)").each(function(){
varfield=$(this);
varfName=field.attr("Name");//讀取節點屬性
vardataType=field.find("datatype").text();//讀取子節點的值
});

C. js 如何讀取xml文檔內容

先判斷瀏覽器,然後讀取xml數據就可以了
//判斷不同的瀏覽器
function InitMf()
{
var mf_change=false;
try {
mf_change = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
mf_change = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
mf_change = false;
}
}
if (!mf_change && typeof XMLHttpRequest!='undefined') {
mf_change = new XMLHttpRequest();
}
return mf_change;
}

讀取數據
var xmlHttp = InitMf();
var HTML = "";
//獲得xml文件
xmlHttp.open("GET", xmlfile+"?"+Math.random(), true);
// 設置處理伺服器的JS函數,函數又 xmlHttp.onreadystatechange來確定
xmlHttp.onreadystatechange=function() {
//alert(xmlHttp.status);
if (xmlHttp.readyState==4 && xmlHttp.status==200) {
//ajax的XML傳輸的解析。獲取解析的數據
var xml = xmlHttp.responseXML;
var node = xml.getElementsByTagName("item");//獲得總結點
for(var i = 0 ; i < node.length ; i++){
var str_t = "";
var str_d = "";
var menuHTML = "";
var elem = node[i];
//下面開始獲得子節點數據,當然可以繼續循環,獲得更下面的節點
var title = elem.getElementsByTagName("title")[0].textContent != undefined ? elem.getElementsByTagName("title")[0].textContent : elem.getElementsByTagName("title")[0].text;

這些只是部分代碼,不過已經足夠了

D. 怎麼獲取xml某個節點下的所有內容

可以通過元素中的getText方法獲取到節點的內容。舉例:SAXReader sax = new SAXReader();Document document = sax.read(reader);//reader為定義的一個字元串,可以轉換為xmlElement root = document.getRootElement();//獲取到根節點元素String str = root .getText()//獲取到節點的內容用到的是dom4j-1.6.1.jar,需要引入的包是:import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;備註:如果是多個子節點可以通過地Element xx=root .element("code")逗獲取到子節點的元素,前提是需要知道子節點的名稱。怎麼獲取xml某個節點下的所有內容

E. 用js怎樣從伺服器端獲取xml格式的數據對象

可以考慮用一下,js + xpath.
參考如下:
var dom=this.LoadXmlString(xmlDomStr);//xmldom
dom.setProperty("SelectionLanguage", "XPath");
var nodes=dom.selectNodes(xpath);
//nodes為返回節點對象集.

F. xml在前端開發里什麼時候會用到

xml是很有用的,具體給你舉兩個列子

  1. 微信開發網頁時,用的都是xml,它是一種標簽語言,可以在裡面自定義標簽,用來表示具體的含義。

2.可以作為數據交互。比如後台要傳數據給前端,或者安卓手機端,可以採用xml。

舉例:

<message>
<id>10</id>
<sender>jack</sender>
<content>helloworld</content>
<time>10:10:00</time>
<message>

這樣是不是格式很清晰呀,所以,做數據格式化傳輸

G. 如何獲取XML頁面的數據如題 謝謝了

這個連接介紹的方法在實踐中並不經常使用,因為很原始。它適合操作本地文件。 1.如若你是獲取xml,那應該使用 simplexml_load_file('url')這個函數,他返回一個xml的DOM模型對象,這個模塊是專門針對xml應用設計的。具體可以查找php的simpleXML相關應用。 2.如果你是獲取html。那麼,php中幾乎所有的目錄函數都支持遠程操作,即文件參數可以是網址。最適合的函數是file_get_contents('url'),他返迴文件內容。 但是大部分免費空間禁止遠程調用,如果是這樣,fopen()或者其他函數都是不行的。那就只能在網頁中用javascript獲取然後處理或者送回網站處理,此方面內容屬於ajax技術,你可以搜索一下。 3.你如果要用到比較復雜一點的功能,比如要打開的頁面 需要登陸,或者需要模擬cookie,就要用php的cURL庫擴展,你可以找一下相關資料 我不能用一篇短文使你學會這幾個模塊的具體應用。

H. 前端怎麼傳xml文件到

WebService中文件傳輸
WebService處理傳遞普通的信息,還可以傳輸文件,下面介紹WebService是怎麼完成文件傳輸的。
1、 首先編寫伺服器端上傳文件的WebService方法

package com.hoo.service;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.activation.DataHandler;

/**
* <b>function:</b>Axis WebService完成文件上傳伺服器端
* @author hoojo
* @createDate Dec 18, 2010 1:16:16 PM
* @file UploadFileService.java
* @package com.hoo.service
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class UploadFileService {

/**
* <b>function:</b>傳遞文件
* @author hoojo
* @createDate Dec 18, 2010 1:27:58 PM
* @param handler DataHandler這個參數必須
* @param fileName 文件名稱
* @return upload Info
*/
public String upload(DataHandler handler, String fileName) {
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
if (handler != null) {
InputStream is = null;
FileOutputStream fos = null;
try {
is = handler.getInputStream();
fos = new FileOutputStream(file);
byte[] buff = new byte[1024 * 8];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff, 0, len);
}
} catch(FileNotFoundException e) {
return "fileNotFound";
} catch (Exception e) {
return "upload File failure";
} finally {
try {
if (fos != null) {
fos.flush();
fos.close();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "file absolute path:" + file.getAbsolutePath();
} else {
return "handler is null";
}
} else {
return "fileName is null";
}
}
}

上傳方法和我們以前在Web中上傳唯一不同的就是參數一DataHandler,可以將這類看成文件傳輸器,他可以把文件序列化。然後通過DataHandler可以得到一個輸入流InputStream,通過這個流可以讀到文件的內容。其他的操作和普通上傳類似。
2、 定製wsdd發布文件上傳的WebService服務

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="UploadFile" provider="java:RPC">
<parameter name="className" value="com.hoo.service.UploadFileService" />
<parameter name="allowedMethods" value="*" />
<parameter name="scope" value="Session" />
<!-- 和伺服器端上傳文件的方法簽名對應,參數也對應 -->
<operation name="upload" qname="operNS:upload" xmlns:operNS="upload" returnType="rns:string"
xmlns:rns="http://www.w3.org/2001/XMLSchema">
<parameter name="handler" type="ns:DataHandler" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
<parameter name="fileName" type="ns:string" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
</operation>
<typeMapping qname="hns:DataHandler" xmlns:hns="ns:FileUploadHandler"
languageSpecificType="java:javax.activation.DataHandler"
serializer="org.apache.axis.encoding.ser." deserializer="org.apache.axis.encoding.ser." encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>
</deployment>

上面才xml節點元素在前面都見過了,說明下operation中的參數,注意要指定參數類型,特別是DataHandler的類型,然後就是typeMapping的serializer、deserializer的序列化和反序列化工廠類的配置。
3、 用dos命令發布當前WebService
C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployUpload.wsdd
發布完成後,可以通過這個地址查看uploadFile這個service了
http://localhost:8080/AxisWebService/servlet/AxisServlet
4、 編寫客戶端代碼

package com.hoo.client;

import java.rmi.RemoteException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.;
import org.apache.axis.encoding.ser.;

/**
* <b>function:</b>上傳文件WebService客戶端
*
* @author hoojo
* @createDate Dec 18, 2010 1:38:14 PM
* @file UploadFileClient.java
* @package com.hoo.client
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class UploadFileClient {

public static void main(String[] args) throws ServiceException, RemoteException {
String url = "http://localhost:8080/AxisWebService/services/UploadFile";
String fileName = "readMe.txt";
String path = System.getProperty("user.dir") + "\\WebRoot\\" + fileName;
System.out.println(path);

//這樣就相當於構造了一個帶文件路徑的File了
DataHandler handler = new DataHandler(new FileDataSource(path));

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);

/**
* 注冊異常類信息和序列化類 ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hns="ns:FileUploadHandler" 的對應 DataHandler
* 和 wsdd 配置文件中的typeMapping中的qname="hns:DataHandler"的DataHandler對應
*/
QName qn = new QName("ns:FileUploadHandler", "DataHandler");
call.registerTypeMapping(DataHandler.class, qn,
.class,
.class);
call.setOperationName(new QName(url, "upload"));

//設置方法形參,注意的是參數1的type的DataHandler類型的,和上面的qn的類型是一樣的
call.addParameter("handler", qn, ParameterMode.IN);
call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN);

//設置返回值類型,下面2種方法都可以
call.setReturnClass(String.class);
//call.setReturnType(XMLType.XSD_STRING);

String result = (String) call.invoke(new Object[] { handler, "remote_server_readMe.txt" });
System.out.println(result);
}
}

至此,文件傳輸就完成了。怎麼樣,還不錯吧!
如果你用myEclipse進行開發的話,運行時可能會出現以下的錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不統一,解決方法如下:
刪除Java EE 5 Libraries/javaee.jar/mail里的包有東西.
具體方法如下:
用rar打開X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然後刪除mail,一切就ok了.

I. 怎麼通過js跨域獲取xml文件並解析到html上呢我要弄一個簡單天氣預報的頁面,主要是怎麼去獲取。

既然是個API,按理它本身應該提供跨域解決方案的,否則它就是個不完善的API。如果確實要自己解決,我個人認為只有通過代理頁面轉發才是最好的方法,就是說自己要有可控制的伺服器( 虛擬主機也可),然後用php、asp或jsp做一個程序文件,你的js把ajax請求發送到這個文件中,這個文件再通過你說的api把請求發送到目標伺服器(伺服器間的通訊是不存在跨域問題的),獲取到xml數據後再轉發給你的js,也就是說你只需要跟你自己的伺服器聯系即可,剩下的事由它去完成。