簡體   English   中英

JavaScript-解析XML數據

[英]JavaScript - parse XML data

所有其他文章都利用解析簡單的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;

每本書我都需要Cookbook> bookid> booktitle>。 我嘗試設置節點和子節點的值,但它從未顯示返回值只是空白或null。 再次,我在這里提到的所有帖子都涉及一個級別而不是三個級別,這就是讓我失望的原因。

這個站點的信息很好,但是又是一個級別... https://developer.mozilla.org/en-US/docs/Web/Guide/Parsing_and_serializing_XML

讓我澄清一些事情。 我正在解析的xml在其他嵌套組下的其他位置列出了書名,例如dogbook> bookid> booktitle。 我想要此組Cookbook> bookid> booktitle>,因為不需要其他標題,因此搜索書名將同時返回cook和dog。 忘了那個重要的部分...

編輯以說明循環瀏覽以下書籍:

您可以在瀏覽器中使用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
})
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);

這會在控制台上打印出“美味的東西”。 Javascript不喜歡多行變量,要么將整個字符串放在一行上,要么使用反斜杠(`)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM