簡體   English   中英

如何在Node.js中刪除名稱空間前綴

[英]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.

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