2017-04-24 7 views
0

を取得、私はこのような構造を持つXMLを持っている:ノードJS、チェリオは、XMLのバージョン

<?xml version="1.0" encoding="windows-1251"?> 
<?xml-stylesheet type="text/xsl" href="25-1.xsl"?> 

<movies> 
    <movie id="1"> 
    <title>Matrix</title> 
    <characters> 
     <character> 
      <name>Tomas Anderson</name> 
      <actor>Keanu Reeves</actor> 
     </character> 
    </characters> 
    <plot> 
     Action 
    </plot> 
    <rating type="stars">5</rating> 
    </movie> 
<movies> 

私はこのXMLのDOMにアクセスするためにcheerioのlibを使用していると私は、タグから値を取得する方法を知っています。

しかし、私は<xml version="1.0" encoding="windows-1251"><?xml-stylesheet type="text/xsl" href="25-1.xsl"?>

からデータを取得し、変更する方法を知らないがチェリオすることにより、これらのintructionタグにアクセスすることもpossbileですか?

答えて

1

私は(x2jsxml-jsxml-parser)複数のXMLパーサをテストしてみたそれらのどれも<?xml-stylesheet ?>タグを解析することができていないようにみえます。 これらの中には、このタグを解析しようとするとXML全体の解析に失敗することがあります。

だから私は、このいずれかを選択します。ここではxml-js

は、あなたがそれを動作させることができる方法である。

var convert = require('xml-js'); 
var converted = convert.xml2json(xml, {compact: true, spaces: 2}); 
console.log(JSON.parse(converted)); 

それはあなたにそのような<?xml ... ?>タグについての情報提供します:だから

{ _declaration: { _attributes: { version: '1.0', encoding: 'windows-1251' } }, ... } 

xml-stylesheetタグの問題を解決するには、この小さなコードをXMLからすべてのタグを解析することができます:

var styleSheets = xml.match(/<\?xml-stylesheet.*\?>/g); 
var arrayCSS = styleSheets.map(css => {                                                  
    var tmp1 = css.split('?').splice(1,1); 
    var tmp2 = tmp1[0].split(' '); 
    tmp2.splice(0, 1); 
    return tmp2.reduce((acc, el) => { 
     var arr = el.split('='); 
     acc[arr[0]] = arr[1].replace(/\"/g, ''); 
     return acc; 
    }, {}); 
}); 

は、それが役に立てば幸い

敬具

+0

非常に興味深いアプローチ。しかし、javascript用のXMLの命令タグを取得するためのライブラリを持たないことは非常に残念です。 PHPは 'DOMDocument'クラスを持っています。これは1行で行うことができます。 –