JavaScript - 解析XML数据

时间:2017-04-25 20:14:59

标签: javascript xml parsing xml-parsing

所有其他帖子都使用解析简单的XML,我需要看看如何解析子级别。

其他人发布的内容......

<book>
 <booktitle>something</booktitle>
 <author>someone</author>
</book>

很容易......但这就是我正在处理的事情,我需要从食谱开始......

<cookbook>
 <bookid>
   <booktitle>something</booktitle>
   <author>someone</author>
 </bookid>
 <bookid>
   <booktitle>something</booktitle>
   <author>someone</author>
 </bookid>
</cookbook>

在Powershell中你可以通过(book.bookid.booktitle)挖掘,但我没有在Javascript中看到这一点。另一件事是,每本书的ID都保持不变,但我需要每本书的名称。

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(book, "text/xml");
var first = xmlDoc.getElementsByTagName("cookbook")[0].childNodes[0].nodeValue;

我需要食谱&gt; bookid&gt; booktitle&gt;为每本书。 我已经尝试设置节点和子节点的值,但它从不显示返回值只是空白或空。我在这里发现的所有帖子都涉及一个级别而不是三个级别,这就是让我失望的原因。

这个网站有很好的信息,但又一个级别...... https://developer.mozilla.org/en-US/docs/Web/Guide/Parsing_and_serializing_XML

让我明白一些事情。我正在解析的xml在其他嵌套组下的其他位置列出了booktitle,比如dogbook&gt; bookid&gt; booktitle。我想要这组食谱&gt; bookid&gt; booktitle&gt;由于其他标题不是通缉,因此寻找书签将返回厨师和狗。忘了主要的重要部分......

2 个答案:

答案 0 :(得分:0)

编辑以说明下面的书籍循环:

您可以在浏览器中使用jQuery,或者在NodeJS中使用cheerio(为服务器构建的jQuery的子集https://www.npmjs.com/package/cheerio)来轻松解析XML。学习API以下载XML文档和/或循环遍历元素可能需要一些时间,但它非常简单易用。

// if jQuery or cheerio is bound as the `$` variable

const myXml = `<books>
  <cookbook>
    <bookid>
      <booktitle>My Cookbook 1</booktitle>
      <author>someone1</author>
    </bookid>
    <bookid>
      <booktitle>My Cookbook 2</booktitle>
      <author>someone</author>
    </bookid>
    <bookid>
      <booktitle>My Cookbook 3</booktitle>
      <author>someone</author>
    </bookid>
  </cookbook>
  <dogbook>
    <bookid>
      <booktitle>My Dogbook 1</booktitle>
      <author>someone</author>
    </bookid>
    <bookid>
      <booktitle>My Dogbook 2</booktitle>
      <author>someone</author>
    </bookid>
  </dogbook>
</books>`

const $myXml = $( $.parseXML(myXml) )
$firstCookBook = $myXml.find('cookbook').find('bookid').first()

$firstCookBook.children('booktitle').text()
// 'My Cookbook 1'

$firstCookBook.children('author').text()
// 'someone1'


// looping through all cookbook titles at books > cookbook > bookid > booktitle
$myXml.children('books').children('cookbook').each(function(index) {
  console.log($( this ).find('booktitle').text())
  // My Cookbook 1
  // My Cookbook 2
  // My Cookbook 3
})

答案 1 :(得分:0)

var book = `<cookbook>
 <bookid>
   <booktitle>something delicious</booktitle>
   <author>someone</author>
 </bookid>
 <bookid>
   <booktitle>something else delicious</booktitle>
   <author>someone</author>
 </bookid>
</cookbook>`;

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(book, "text/xml");
var first = xmlDoc.getElementsByTagName("booktitle")[0].childNodes[0].nodeValue;

console.log(first);

这印刷了一些美味的东西&#39;到控制台。 Javascript不喜欢多行变量要么将整个字符串放在一行上,要么使用返回tick(`)。