Помогите распарсить следующую структуру на javascript
Необходимо помочь с кодом на javascript, или вообще сказать можно ли это сделать. Пример входных данных которые надо распарсить приведен ниже, то что нужно как раз из этих данных вытащить хранится под тэгами loc.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://url.com/</loc>
<lastmod>2020-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/about.html</loc>
<lastmod>2020-07-04T08:34:48+01:00</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/create</loc>
<priority>1.0</priority>
</url>
</urlset>
Необходимо вытащить эти адреса, можно их потом сложить в отдельный массив или иной вариант который вам удобен, главное как их извлечь.
Ответы (2 шт):
Автор решения: Aleksandr
→ Ссылка
const str = `
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://url.com/</loc>
<lastmod>2020-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/about.html</loc>
<lastmod>2020-07-04T08:34:48+01:00</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/create</loc>
<priority>1.0</priority>
</url>
</urlset>
`
const regexp = /(?<=<[Ll][Oo][Cc]>)([\s\S]*?)(?=<\/[Ll][Oo][Cc]>)/g
const urls = str.match(regexp)
console.log(urls)
Думаю, что можно их извлечь таким образом:
const url = './sitemap.xml'
const xml = new window.XMLHttpRequest()
xml.open("GET", url, false)
xml.send("")
const regexp = /(?<=<[Ll][Oo][Cc]>)([\s\S]*?)(?=<\/[Ll][Oo][Cc]>)/g
const urls = xml.response.match(regexp)
console.log(urls)
Автор решения: Qwertiy
→ Ссылка
var xmlStr = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://url.com/</loc>
<lastmod>2020-07-04</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/about.html</loc>
<lastmod>2020-07-04T08:34:48+01:00</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>http://url.com/create</loc>
<priority>1.0</priority>
</url>
</urlset>`
var parser = new DOMParser()
var xml = parser.parseFromString(xmlStr, 'application/xml')
var res = Array.from(xml.querySelectorAll('loc')).map(x => x.textContent)
console.log(res)