我在node.js应用程序中使用xpath,但是我不知道女巫是在我的dom中选择某些节点的正确表达方式。
我已经安装:https://www.npmjs.com/package/xpath
这是我的var xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://generic.net/it/diventa-promoter</loc>
<xhtml:link
rel="alternate"
hreflang="en"
href="https://generic.net/en/become-promoter"
/>
<image:image>
<image:loc>https://generic.net/view/image/logo.jpg</image:loc>
<image:caption>Logo</image:caption>
</image:image>
<image:image>
<image:loc>https://generic.net/view/image/step_1.jpg</image:loc>
<image:caption>xxx</image:caption>
</image:image>
</url>
<url>
<loc>https://generic.net/it/accedi</loc>
</url>
<url>
<loc>https://generic.net/it/aggiungi-il-tuo-brand</loc>
<image:image>
<image:loc>https://generic.net/view/image/how_it_works_it.jpg</image:loc>
<image:caption>zzz?</image:caption>
</image:image>
</url>
<url>
<loc>https://generic.net/it/domande-frequenti-brand</loc>
</url>
<url>
<loc>https://generic.net/it/domande-frequenti-rivenditori</loc>
</url>
</urlset>
这是我的js代码
var doc = new dom().parseFromString(xml);
var nodes = xpath.select("//loc", doc);
console.log(nodes);
但是结果是-> [];
根据文档,此表达式“ // loc” 必须选择所有“ loc”节点。但是没有用。 我什么也没选择。但是,如果我全选(“ // *”),这项工作就可以完成。
答案 0 :(得分:1)
您的整个XML文件位于名称空间中。第一行
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ...
为所有元素设置默认名称空间,因此为loc
元素设置默认名称空间。所以要么用
var select = xpath.useNamespaces({"ns0": "http://www.sitemaps.org/schemas/sitemap/0.9"});
并在表达式//ns0:loc
中使用它。
或使用谓词表达式(如
loc
元素上的所有名称空间
//*[local-name()='loc']