導航:首頁 > 文件教程 > nodejs讀xml文件

nodejs讀xml文件

發布時間:2023-03-05 08:31:18

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

請把下面的代碼保存為 readxml.html

<html>
<head>
<scripttype="text/javascript">
varxmlhttp;
functionloadXMLDoc(url)
{
xmlhttp=null;
if(window.XMLHttpRequest)
{//codeforIE7,Firefox,Opera,etc.
xmlhttp=newXMLHttpRequest();
}
elseif(window.ActiveXObject)
{//codeforIE6,IE5
xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
}
if(xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
else
{
alert(".");
}
}
functionstate_Change()
{
if(xmlhttp.readyState==4)
{//4="loaded"
if(xmlhttp.status==200)
{//200="OK"
document.getElementById('A1').innerHTML=xmlhttp.status;
document.getElementById('A2').innerHTML=xmlhttp.statusText;

document.getElementById('A3').innerHTML=xmlhttp.responseText;
}
else
{
alert("ProblemretrievingXMLdata:"+xmlhttp.statusText);
}
}
}
</script>
</head>
<body>
<h2>UsingtheHttpRequestObject</h2>
<p><b>Status:</b>
<spanid="A1"></span>
</p>
<p><b>Statustext:</b>
<spanid="A2"></span>
</p>
<p><b>Response:</b>
<br/><spanid="A3"></span>
</p>
<buttononclick="loadXMLDoc('note.xml')">GetXML</button>
</body>
</html>

請把下面的文件保存未 note.xml

<?xmlversion="1.0"encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don'tforgetthemeeting!</body>
</note>

B. xml文件怎麼打開

想要打開xml文件,主要有這樣幾種方法:

1、找到你想要打開的XML文件。XML文件被編碼成純文本,因此,你 可以在任何文本編輯器中打開它們 ,並能在上面清楚地閱讀文件內容。

2、 使用Excel打開。 右鍵點擊XML文件,選擇 打開方式。 這會顯示出一個程序列表,你可以從中選擇Excel程序來打開文件。

3、 使用網路瀏覽器打開。 在網路瀏覽器里打開文件能讓用戶更方便地查看文件內容,找到具體的信息。這是因為大多數的網路瀏覽器能夠自動地識別嵌套標簽,並允許用戶折疊XML標簽樹里的每個部分。

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文件,為什麼node.getNodeValue的值為空

樓主麻煩你下次貼代碼用上標簽,會有高亮顯示,另外貼關鍵部分就可以了,呵呵!
其實看這幾行就夠了
Java code

private List read(org.w3c.dom.Document doc,Logger log){
Element root=doc.getDocumentElement();
NodeList formDatas=root.getElementsByTagName(formData);
for(int i=0;i <formDatas.getLength();i++){
Node formData=formDatas.item(i);
formData.getNodeType();
for(Node node=formData.getFirstChild();node!=null;node=node.getNextSibling())
if(node.getNodeType()==node.ELEMENT_NODE)
node.getNodeValue();
}
}

幾點錯誤,你的getElementByTageName("formData") 應該是傳字元串進去返回一個NodeList,
root就是根元素formData瞭然後要獲得它之下名字為formData的元素,只會一個都沒有所以for循環不會走的,你應該直接得到root的childNodes,然後遍歷,順便注意一下就連換行也會計算為一個元素

E. 讀取本地XML文件方法

對讀取的xml格式的數據 用 $(xxx).html() 時找不到 innerHTML對象 , 發現此時讀取的XML數據為字元串,不是DOM對象[jQuery庫]

所以:
ReadXml("1.xml");
function ReadXml(url){
    $.get(url, function(d){
         var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
         xmlDoc.async = false;
         if( !xmlDoc.load(d) ){ alert(" 載入失敗!"); return false; }
         var objE = document.createElement("div");
         objE.innerHTML = xmlDoc.xml;
         return objE; 
    }
}

F. nodejs實現一個word文檔解析器思路詳解

之前項目里遇到一個需求,需要前端上傳一個word文檔,然後後端提取出該文檔的指定位置的內容並保存。這里後端用的是nodejs,開始接到這個需求,發現無從下手,主要是沒有處理過word這種類型的文檔,怎麼解析?
Excel倒是有相關的庫可以用,而且很簡單
思路
搜索了好一會兒,在npm上發現了一個叫做
adm-zip
的包,這個包可以解壓縮word文檔,原來word文檔也是可以解壓縮的,之前一直不知道,通過如下代碼就可以將word文檔解壓縮,並進一步提取內容
var
admZip
=
require('adm-zip');
const
zip
=
new
admZip('test.docx');
//將該docx解壓到指定文件夾result下
zip.extractAllTo("./result",
/*overwrite*/true);
首先我們新建一個docx文檔,內容如下

然後運行上述代碼進行解壓縮,得到如下的文件,由下圖可以看出生成了好幾個文件夾,word的內容其實是在word文件夾里的document.xml文件內(這里解壓縮後其實源文件還在,並沒有消失)

進入word文件夾後的內容

我們繼續打開document.xml文件來一探究竟裡面到底是啥?注意要用瀏覽器直接打開,如果用ide打開顯示出的所有內容都在一行,無法閱讀!

上圖只是word文檔的一部分,會發現word文檔內看著只有幾段文字,但是xml中卻是長篇大論,仔細分析下也很正常,xml全稱可擴展標記語言,其被設計為傳輸和存儲數據,它僅僅是一個純文本的表示,而word中內容格式千變萬化,肯定需要一種方法來有效描述這些內容的格式,因此採用了xml來描述
我們嘗試一下將
測試文檔
四個字加粗變色傾斜字體,如下圖

然後再進行解壓縮,得到docuemnt.xml並查看對應的內容,如下

這就很明顯了,
<w:b/>
表示文字加粗,
<w:i/>
表示文字傾斜,
<w:color>
表示文字的顏色,所以這么4個字就需要這幾行xml來描述,因此長篇大論的xml也就不足為奇
提取內容
上面說到了xml僅僅是一個文本的表示,我們可以用如下代碼讀取整個xml的內容,結果是一個
string
var
contentXml
=
zip.readAsText("word/document.xml");
接下來是重點,如何提取我們想要的內容呢,答案是正則表達式,首先我們得分析一下word文檔的結構,word文檔其實是由叫做
Paragraph
的段落所構成,在vb中可以很輕松的獲取並修改段落,官網傳送門點此

那麼到底怎麼樣才是一個
Paragraph
呢,其實很簡單,仔細觀察word文檔,見到下圖中的小箭頭了么,每個小箭頭前面的內容就是一個段落,那麼下圖中一共有16個
Paragraph
,當然有些段落是空的,沒有任何內容

我們再來研究xml的結構,收起展開的xml,如下圖,發現
<w:p></w:p>
這么個標簽就是表示的一個段落,中間還有些
<w:p>
藏在表格內,這么一看錶格前面3個段落,後面3個段落,和上圖是對應的

因此,
我們就可以提取出每個段落的文本並返回一個數組,每一項就是一個段落的內容
,這樣就能夠完整的解析出整個word的內容,關鍵在於如何提取每個
<w:p>
的內容,我們繼續展開一個
<w:p>
進行觀察,如下圖,發現內容雖多,其實文本都保存在
<w:t>
中間,因此思路就清晰了,
首先用正則表達式提取出所有<w:p>的內容,再針對每個<w:p>的內容,進行進一步正則提取,提取出其裡面所有<w:t>的內容,並拼接在一起構成一個段落的總內容

具體代碼
下面是具體的提取代碼
//參數是word文件名,第二個參數是回調表示解析完成
var
parser
=
function
parseWordDocument(absoluteWordPath,callback){
//返回內容的數組
var
resultList
=
[];
//如果文件存在
fs.exists(absoluteWordPath,
function(exists){
if(exists){
//解壓縮
const
zip
=
new
admZip(absoluteWordPath);
//將document.xml(解壓縮後得到的文件)讀取為text內容
var
contentXml
=
zip.readAsText("word/document.xml");
//正則匹配出對應的<w:p>裡面的內容,方法是先匹配<w:p>,再匹配裡面的<w:t>,將匹配到的加起來即可
//注意?表示非貪婪模式(盡可能少匹配字元),否則只能匹配到一個<w:p></w:p>
var
matchedWP
=
contentXml.match(/<w:p.*?>.*?<\/w:p>/gi);
//繼續匹配每個<w:p></w:p>裡面的<w:t>,這里必須判斷matchedWP存在否則報錯
if(matchedWP){
matchedWP.forEach(function(wpItem){
//注意這里<w:t>的匹配,有可能是<w:t
xml:space="preserve">這種格式,需要特殊處理
var
matchedWT
=
wpItem.match(/(<w:t>.*?<\/w:t>)|(<w:t\s.[^>]*?>.*?<\/w:t>)/gi);
var
textContent
=
'';
if(matchedWT){
matchedWT.forEach(function(wtItem){
//如果不是<w:t
xml:space="preserve">格式
if(wtItem.indexOf('xml:space')===-1){
textContent+=wtItem.slice(5,-6);
}else{
textContent+=wtItem.slice(26,-6);
}
});
resultList.push(textContent)
}
});
//解析完成
callback(resultList)
}
}else{
callback(resultList)
}
});
};
注意一下如果段落前有空格,那麼
<w:t>
的格式是不同的,如下,多了這個space描述,所以需要特殊處理
代碼量其實很少,關鍵在於正則的編寫,上述docx文檔提取後的輸出結果如下

最後我把這個工具寫成了一個npm包,地址點這里

G. 關於js讀取xml數據並且顯示在html中 如何實現

JS]利用js將讀取到的xml文件中的數據顯示到html文檔上
script type="text/javascript" language="javascript">
var xmlDoc = checkXMLDocObj('../openClass.xml');//讀取到xml文件中的數據
var a = document.getElementsByTagName("a");//獲取所有的A標簽
$(document).ready(function () {
var nodes;
if($.browser.msie){ // 注意各個瀏覽器之間的區別
nodes = xmlDoc.getElementsByTagName('collage')[0].childNodes; //讀取XML文件中需要顯示的數據
}
else if (isFirefox=navigator.userAgent.indexOf("Firefox")>0){
nodes = xmlDoc.getElementsByTagName('collage')[0].children; //讀取XML文件中需要顯示的數據
}
else{
nodes = xmlDoc.getElementsByTagName('resource');
}

for (var i = 0; i < a.length; i++) {
if (a[i].parentNode.nodeName == "SPAN") {
for (var j = 0; j < nodes.length; j++) {
var resource = nodes[j];
var url = resource.getAttribute('url');
var href=$(a[i]).attr("href");
if (href == url) {
var count = resource.getAttribute('click');
var span = document.createElement("div");
var str = document.createTextNode("點擊率:" + count);
span.appendChild(str);
var div = a[i].parentNode.parentNode;
div.appendChild(span);
break;
}
}
}
}
});
$(function(){ //通過get請求,將點擊率增加
$(a).mousedown(function(){
var href = $(this).attr("href");
$.get("../receive.ashx",{url:href,rd:Math.random()}, function (msg) {

});
})
})
</script>

H. java怎樣讀寫和修改XML文件

xml:

<?xml version="1.0" encoding="UTF-8"?>

<users>

<Messages>
<sendName>sendUsers</sendName>
<receiveName>snake</receiveName>
<date>2007-12-04 12:20:00</date>
<status>0</status>
<message>this is Content</message>
</Messages>

</users>

java:

package com.lianxi.DAO;
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class UpdateXml {
public static boolean doc2XmlFile(Document document,String filename)
{
boolean flag = true;
try
{
/** 將document中的內容寫入文件中 */
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
/** 編碼 */
//transformer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(filename));
transformer.transform(source, result);
}catch(Exception ex)
{
flag = false;
ex.printStackTrace();
}
return flag;
}

public static Document load(String filename)
{
Document document = null;
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
document=builder.parse(new File(filename));
document.normalize();
}
catch (Exception ex){
ex.printStackTrace();
}
return document;
}
/**
* 演示修改文件的具體某個節點的值
*/
public static void xmlUpdateDemo()
{
Document document = load("c://Message.xml");
Node root=document.getDocumentElement();
/** 如果root有子元素 */
if(root.hasChildNodes())
{
/** ftpnodes */
NodeList ftpnodes = root.getChildNodes();
/** 循環取得ftp所有節點 */
for (int i=0;i<ftpnodes.getLength();i++)
{
NodeList ftplist = ftpnodes.item(i).getChildNodes();
for (int k=0;k<ftplist.getLength();k++)
{
Node subnode = ftplist.item(k);
/** 刪除ftp-chn節點 */
// if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="ftp-chn")
// {
// ftpnodes.item(i).removeChild(subnode);
// }
/** 修改ftp-host的值為 192.168.0.1 */
if (subnode.getNodeType()==Node.ELEMENT_NODE&&subnode.getNodeName()=="status")
{
subnode.getFirstChild().setNodeValue("1");
}
}

}
}

doc2XmlFile(document,"c://Message.xml");
}
public static void main(String args[])throws Exception
{
UpdateXml.xmlUpdateDemo();
}
}

閱讀全文

與nodejs讀xml文件相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接