导航:首页 > 文件教程 > 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

友情链接