欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用xml2js庫進(jìn)行XML數(shù)據(jù)解析

 更新時(shí)間:2023年09月20日 10:34:42   作者:泯瀧  
這篇文章主要為大家介紹了使用xml2js庫進(jìn)行XML數(shù)據(jù)解析用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

解析XML文件是開發(fā)中常見的需求之一。為了以一種簡(jiǎn)單易用的方式訪問XML數(shù)據(jù),你可能不想編譯一個(gè)C解析器,而是想尋找一個(gè)更方便的解決方案。那么,xml2js就是你需要的工具!xml2js是一個(gè)簡(jiǎn)單的XML到JavaScript對(duì)象轉(zhuǎn)換器,支持雙向轉(zhuǎn)換。它使用了sax-js和xmlbuilder-js這兩個(gè)工具庫。

安裝

最簡(jiǎn)單的安裝xml2js的方式是使用npm。只需執(zhí)行npm install xml2js,npm將會(huì)下載xml2js及其所有依賴。

xml2js也可以通過Bower進(jìn)行安裝,只需執(zhí)行bower install xml2js,Bower將會(huì)下載xml2js及其所有依賴。

用法

由于你是一位非常聰明的開發(fā)者,所以不需要過多的教程指導(dǎo)。解析XML應(yīng)該是一件簡(jiǎn)單的事情,我們直接通過一些示例進(jìn)行學(xué)習(xí)。

簡(jiǎn)短用法

你希望盡可能簡(jiǎn)單、輕松地解析XML嗎?使用以下代碼:

var parseString = require('xml2js').parseString;
var xml = "<root>Hello xml2js!</root>"
parseString(xml, function (err, result) {
    console.dir(result);
});

這真是再簡(jiǎn)單不過了,對(duì)吧?這個(gè)方法適用于xml2js的0.2.3版本及以上。使用CoffeeScript時(shí),代碼如下:

CoffeeScript 可能比較小眾,但是官方文檔有舉例了相關(guān)內(nèi)容,故本文進(jìn)行保留。

{parseString} = require 'xml2js'
xml = "<root>Hello xml2js!</root>"
parseString xml, (err, result) ->
    console.dir result

如果你需要一些特殊的選項(xiàng),也不用擔(dān)心,xml2js支持許多選項(xiàng)(見下文),你可以將這些選項(xiàng)作為第二個(gè)參數(shù)進(jìn)行指定:

parseString(xml, {trim: true}, function (err, result) {
});

實(shí)例方法

如果你之前一直使用xml-simple或者自己封裝的方法來處理XML,那么從0.1.11版本開始,xml2js為你添加了以下方法:

var fs = require('fs'),
    xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile(__dirname + '/foo.xml', function(err, data) {
    parser.parseString(data, function (err, result) {
        console.dir(result);
        console.log('Done');
    });
});

看吧,沒有事件監(jiān)聽器!

你還可以使用CoffeeScript來進(jìn)一步減少代碼的冗余:

fs = require 'fs',
xml2js = require 'xml2js'
parser = new xml2js.Parser()
fs.readFile __dirname + '/foo.xml', (err, data) ->
  parser.parseString data, (err, result) ->
    console.dir result
    console.log 'Done.'

但是,如果你忘記使用new關(guān)鍵字創(chuàng)建一個(gè)新的Parser對(duì)象會(huì)怎么樣?從0.2.8開始,你也可以不使用這個(gè)關(guān)鍵字。從0.2.8開始,你可以不使用它,在這種情況下,xml2js會(huì)幫助你添加它,以保證不會(huì)再出現(xiàn)意外和莫名其妙的bug!

Promise 用法

var xml2js = require('xml2js');
var xml = '<foo></foo>';
// 1. With parser
var parser = new xml2js.Parser(/* options */);
parser.parseStringPromise(xml).then(function (result) {
  console.dir(result);
  console.log('Done');
})
.catch(function (err) {
  // Failed
});
// 2. Without parser
xml2js.parseStringPromise(xml /*, options */).then(function (result) {
  console.dir(result);
  console.log('Done');
})
.catch(function (err) {
  // Failed
});
  • 使用解析器進(jìn)行解析:通過創(chuàng)建xml2js解析器的實(shí)例,調(diào)用解析器的parseStringPromise方法對(duì)XML數(shù)據(jù)進(jìn)行解析,并通過.then()方法處理解析成功的結(jié)果,通過.catch()方法處理解析過程中的錯(cuò)誤。
  • 不使用解析器直接解析:直接調(diào)用xml2js庫的parseStringPromise方法對(duì)XML數(shù)據(jù)進(jìn)行解析,通過.then()方法處理解析成功的結(jié)果,通過.catch()方法處理解析過程中的錯(cuò)誤。這種方法省去了創(chuàng)建解析器實(shí)例的步驟,直接調(diào)用庫函數(shù)進(jìn)行解析。

使用 XML 構(gòu)建器

自 0.4.0 版本起,xml2js 還支持使用對(duì)象來構(gòu)建 XML。下面是一個(gè)示例:

const xml2js = require('xml2js');
const obj = {name: "Super", Surname: "Man", age: 23};
const builder = new xml2js.Builder();
const xml = builder.buildObject(obj);

上述代碼將生成如下的 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
  <name>Super</name>
  <Surname>Man</Surname>
  <age>23</age>
</root>

通過設(shè)置 cdata 選項(xiàng)為 true,可以支持寫入 CDATA。

指定屬性

使用 xml2js,你可以指定 XML 元素的屬性。下面是一個(gè)示例:

const xml2js = require('xml2js');
const obj = {root: {$: {id: "my id"}, _: "my inner text"}};
const builder = new xml2js.Builder();
const xml = builder.buildObject(obj);

上述代碼將生成如下的 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root id="my id">my inner text</root>

添加 xmlns 屬性

xml2js 還支持在生成的 XML 中添加 XML 命名空間前綴和 URI 對(duì),通過使用 xmlns 屬性。

在根元素上聲明默認(rèn)命名空間的示例:

const obj = { 
  Foo: {
    $: {
      "xmlns": "http://foo.com"
    }   
  }
};

通過調(diào)用 buildObject(obj) 方法,將生成以下 XML:

<Foo xmlns="http://foo.com"/>

在非根元素上聲明非默認(rèn)命名空間的示例:

const obj = {
  'foo:Foo': {
    $: {
      'xmlns:foo': 'http://foo.com'
    },
    'bar:Bar': {
      $: {
        'xmlns:bar': 'http://bar.com'
      }
    }
  }
};

通過調(diào)用 buildObject(obj) 方法,將生成以下 XML:

<foo:Foo xmlns:foo="http://foo.com">
  <bar:Bar xmlns:bar="http://bar.com"/>
</foo:Foo>

處理屬性、標(biāo)簽名和值

自 0.4.1 版本起,你可以選擇提供解析器的屬性名和標(biāo)簽名處理器,以及元素值處理器(自 0.4.14 版本起,還可以提供屬性值處理器)。

下面是一個(gè)示例,演示如何將屬性名和標(biāo)簽名轉(zhuǎn)換為大寫:

function nameToUpperCase(name) {
  return name.toUpperCase();
}
// 將所有屬性和標(biāo)簽名及其值轉(zhuǎn)換為大寫
parseString(xml, {
  tagNameProcessors: [nameToUpperCase],
  attrNameProcessors: [nameToUpperCase],
  valueProcessors: [nameToUpperCase],
  attrValueProcessors: [nameToUpperCase]
}, function (err, result) {
  // 處理后的數(shù)據(jù)
});

tagNameProcessors 和 attrNameProcessors 選項(xiàng)接受一個(gè)函數(shù)數(shù)組,函數(shù)的簽名如下:

function (name) {
  // 對(duì) `name` 做一些處理
  return name;
}

attrValueProcessors 和 valueProcessors 選項(xiàng)接受一個(gè)函數(shù)數(shù)組,函數(shù)的簽名如下:

function (value, name) {
  // `name` 將是節(jié)點(diǎn)名或?qū)傩悦?
  // 對(duì) `value` 做一些處理,可以根據(jù)節(jié)點(diǎn)或?qū)傩悦远x處理方式
  return value;
}

xml2js 提供了一些內(nèi)置的處理器,可以在 lib/processors.js 文件中找到:

  • normalize:將名稱轉(zhuǎn)換為小寫(當(dāng) options.normalize 設(shè)置為 true 時(shí)自動(dòng)使用)
  • firstCharLowerCase:將首字母轉(zhuǎn)換為小寫。例如,'MyTagName' 變?yōu)?'myTagName'
  • stripPrefix:去除 XML 命名空間前綴。例如,<foo:Bar/> 將變?yōu)?'Bar'(注意:xmlns 前綴不會(huì)被去除)
  • parseNumbers:將類似整數(shù)的字符串解析為整數(shù),將類似浮點(diǎn)數(shù)的字符串解析為浮點(diǎn)數(shù)。例如,"0" 變?yōu)?0,"15.56" 變?yōu)?15.56
  • parseBooleans:將類似布爾值的字符串解析為布爾值。例如,"true" 變?yōu)?true,"false" 變?yōu)?false

xml2js 提供了強(qiáng)大的功能,使得在 Node.js 應(yīng)用程序中解析和構(gòu)建 XML 變得簡(jiǎn)單而靈活。無論你是需要解析復(fù)雜的 XML 文檔,還是需要構(gòu)建自定義的 XML 輸出,xml2js 都是一個(gè)值得嘗試的工具。

參考文檔:

Leonidas-from-XIV/node-xml2

js: XML to JavaScript object converter.

以上就是使用xml2js庫進(jìn)行XML數(shù)據(jù)解析的詳細(xì)內(nèi)容,更多關(guān)于xml2js解析XML數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論