[英]How to remove namespace prefix in Node.js
我正在Node.js中使用Web服務。
在SOAP響應中,元素帶有名稱空間前綴,例如
<common_v26_0:BookingTravelerRef Key="lGZGs8IORfCNhaHEyHf0FA=="/>
如何刪除這些前綴(例如common_v26_0:
?
通常,您不必刪除任何前綴。 如果您打算從XML讀取數據,則可以使用DOM API中的名稱空間感知方法,或者如果使用XPath,則可以注冊名稱空間。 在XPath中,您也可以選擇忽略名稱空間的數據。
您必須發現什么是名稱空間。 例如,在您的SOAP響應中,應該有一個帶有名稱空間聲明的屬性,例如xmlns:common_v26_0="your-namespace-uri"
。 您將需要your-namespace-uri從響應中選擇數據:
var nsURI = "your-namespace-uri"; // replace with the actual namespace for `common_v26_0`
要選擇BookingTravelerRef
請使用帶有NS后綴的DOM方法,例如:
var element = xmlnode.getElementsByTagNameNS(nsURI, 'BookingTravelerRef');
console.log(element.getAttribute("Key")); // unprefixed attributes belong in no namespace
如果使用的是XPath,則會創建一個解析名稱空間的函數。 SOAP響應通常具有許多名稱空間,因此您可以在同一函數中處理所有這些名稱空間。 但是,如果您只對其中之一感興趣,則還可以內聯函數:
function resolver(prefix) {
if (prefix='common_v26_0') { return "your-namespace-uri"; }
// else if ... other namespaces you might want to resolve
else return null;
}
然后,您可以在XPath表達式中使用它:
xmlnode.evaluate("//common_v26_0:BookingTravelerRef/@Key", xmlnode, resolver, XPathResult.ANY_TYPE, null);
最后,您可以忽略 XPath中與所有元素匹配的名稱空間,然后按其本地名稱進行過濾:
xmlnode.evaluate("//*[local-name()='BookingTravelerRef']/@Key", ...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.