javascript - Node JS、Cheerio、获取 XML 版本

标签 javascript node.js xml xslt cheerio

我有一个具有以下结构的 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>

我正在使用cheerio lib 来访问此 XML 的 DOM,并且我知道如何从标签获取值。

但是,我不知道如何从 <xml version="1.0" encoding="windows-1251"> 获取和更改数据<?xml-stylesheet type="text/xsl" href="25-1.xsl"?>

是否可以通过cheerio访问这些指令标签?

最佳答案

我测试了多个 xml 解析器( x2jsxml-jsxml-parser ),但它们似乎都无法解析 <?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;
    }, {});
});

希望对你有帮助

致以诚挚的问候

关于javascript - Node JS、Cheerio、获取 XML 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43588524/

相关文章:

像 b-0212 这样的字符串的 Javascript 验证

css - Bootstrap css 未加载到 .ejs 文件中?

javascript - 在 Node.js 中获取 Excel 工作表单元格的计算值

json - 从 XML 到 JSON 的转换

c# - 如何在xml中嵌入xml

javascript - 如何使用express和node进行异步调用

javascript - 为什么我得到这个 'res.render() is not a function'

javascript - 如何用不同的结果替换文本中所有相同的字符/字符串?

node.js - 如何根据正则表达式指定的路径将路由器附加到 Express 应用程序?

java - VTD-XML 和 Xpath 2.0 转义字符串