如何在javascript中有效地解析xml

问题描述:

我有一个很大的xml结构。我对如下的某些xml结构感兴趣。我只需要提取img标签和src属性的值(如果它们位于珊瑚卡内)。我试图使用正则表达式来获取珊瑚卡封闭标签与正则表达式,然后使用正则表达式与珊瑚卡标签到达img标签和内容。如何在javascript中有效地解析xml

var regex = /<coral\-card ((.|[\r\n])*?)<\/coral\-card>/g; 

当我得到指定的xml内容包含像下面的珊瑚卡标签后有什么方法可以使用。我不想在此之后使用正则表达式,因为我认为应该可以使用jquery或javascript函数获取img标记和src属性值。

<coral-card variant="condensed" data-timeline="true" stacked> 
    <coral-card-asset> 
     <img src="/content/dam/collections/3/3qtVFsGwnDVKpZ6H_SaM/lightbox.folderthumbnail.jpg?width=240&height=240"> 
    </coral-card-asset> 
</coral-card> 

<coral-card variant="semi-condensed" data-timeline="true" stacked> 
    <coral-card-asset> 
     <img src="/content/dam/collections/3/3qtVFsGwnDVKpZ6H_SaM/small.folderthumbnail.jpg?width=240&height=240"> 
    </coral-card-asset> 
</coral-card> 
+0

你有没有考虑用[的DOMParser(https://developer.mozilla.org/en-US/docs/解析网络/ API /的DOMParser)? – ray

+0

http://*.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – nicovank

DOMParser和xpath非常容易用于解析xml。你可以这样做:

const DOMParser = require('xmldom').DOMParser; 
const xpath = require('xpath'); 

let parser = new DOMParser(); 
let doc = parser.parseFromString(<your xml>); 
let document = doc.documentElement; 
let coralCards = xpath.select('<path>/coral-card', document); 

请参阅xpath文档,了解从xml blob中提取节点的所有方法。

这也正是为什么core DOM specification创建:

// Find all the <coral-card> elements: 
 
var elements = document.getElementsByTagName("coral-card"); 
 

 
// Loop through them: 
 
for(var i = 0; i < elements.length; ++i){ 
 
    // Extract whatever you need: 
 
    console.log(elements[i].getAttribute("variant")); 
 
    console.log(elements[i].querySelector("img").src); 
 
}
<coral-card variant="condensed" data-timeline="true" stacked> 
 
    <coral-card-asset> 
 
     <img src="/content/dam/collections/3/3qtVFsGwnDVKpZ6H_SaM/lightbox.folderthumbnail.jpg?width=240&height=240"> 
 
    </coral-card-asset> 
 
</coral-card> 
 

 
<coral-card variant="semi-condensed" data-timeline="true" stacked> 
 
    <coral-card-asset> 
 
     <img src="/content/dam/collections/3/3qtVFsGwnDVKpZ6H_SaM/small.folderthumbnail.jpg?width=240&height=240"> 
 
    </coral-card-asset> 
 
</coral-card>

+0

谢谢。我已经在珊瑚卡标签中指定了xml内容,或者准确地说,我有一个非常大的HTML内容可以说htmlResponse它有这个XML内容。在这种情况下,documen.GetEelementsByTagName将如何工作?我应该首先使用parseHTML将html响应字符串转换为DOM吗? – Geek

+0

@Geek是的。一旦它从一个字符串中解析出来。你可以使用DOM API遍历它并提取你想要的任何东西。 –