【问题标题】:Trouble getting XML file values w/ JS无法使用 JS 获取 XML 文件值
【发布时间】:2021-07-13 08:53:27
【问题描述】:

我需要将 XML 文件中的一些项目作为参数传递给 res.renderer() 函数(如下所示)。我目前可以使用这个示例 XML 来实现这一点:

示例.xml

 <breakfast_menu>
   <food>
     <name>Belgian Waffles</name>
    </food>
   <food>
     <name>Strawberry Belgian Waffles</name>
   </food>

...使用此代码:

 const parseString = require('xml2js').parseString;
 const axios = require('axios');

let url = 'https://www.w3schools.com/xml/simple.xml';
app.get('/dynamic_view', function(req, res, next){

     //GET THE XML URL
     axios.get(url)

       //PARSE THE XML FILE
       .then(({ data }) => {
         parseString(data, (err, { breakfast_menu: { food } }) => {
           if (err) return next(err)
           
           let food_names = [];
           //ITERATE OVER NAME VALUES OF FOODS, PUSH THEM TO AN ARRAY
           food.map(({name}) => {
             console.log(name);
             food_names.push(name[0]);
           });

           //PASS THE ARRAY WITH VALUES TO res.renderer()
           res.render('dynamic', {
              names: food_names
           });
         });        
       })
  })

但是,我在导航和传递来自另一个具有更多子元素的 XML 的值时遇到了问题:

问题.xml

<rss xmlns="https://url/rss" version="5.0">
    <channel>
          <description>Main channel</description>
          <link/>

          <product>
          <id>4bc1d0ac9276</id>
          <description></description>
          </product>

           <product>
          <id>4bc1d0ac9276</id>
          <description></description>
          </product>

    </channel>
</rss>

如何访问问题 XML 文件的“产品”元素,将它们推送到数组并将其传递给 res.renderer,与工作代码 sn-p w/ Sample.xml 文件中显示的方式相同?我在使用 JS 导航 Problem.xml 的 XML 结构时遇到问题。

为此苦苦挣扎了一段时间,感谢任何帮助!

【问题讨论】:

  • 你可以探索npm包npmjs.com/package/xml2js
  • @PrakashS 我有,但仍然无法解决这个问题。我尝试用parseString(data, (err, { rss.channel[0]: { product } }) =&gt; { 替换parseString(data, (err, { breakfast_menu: { food } }) =&gt; {,但我得到SyntaxError unexpected '.' after rss
  • @PrakashS 为什么我无法访问 rss.channel[0]: { product } 与 { Breakfast_menu: { food } 一样?:
  • 请创建一个最小的示例,我们可以帮助您弄清楚

标签: javascript xml express axios xml2js


【解决方案1】:

我是这样解决的:

parseString(data, (err, file) => {
            if (err) return next(err)
            title=file.rss.channel[0].item;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多