我在使用 document.evaluate 函式檢查 xPath 驗證時遇到問題。在 Firefox 中,document.createNSResolver 無法正常作業......我只得到 xmlDoc 沒有別的。當我在評估中將其保留為空值時,它仍然不起作用。Edge、Opera、Chrome 與所有這些瀏覽器我都沒有問題,一切運行順利。有人知道 FireFox 的問題在哪里嗎?我應該改變什么?我一直在尋找解決方案,但我找不到...
我的主要功能如下:
const checkXPathVisiblity = (xPathValid?: string) => {
if (!xPathValid) return false;
try {
const parsedXPathValid = _.unescape(xPathValid);
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xml, 'text/xml');
const resolver = document.createNSResolver(xmlDoc);
const result = document.evaluate(parsedXPathValid, xmlDoc, resolver);
return !!result.booleanValue;
} catch (error) {
return false;
}
};
其中:
xPathValid:
number(Dokument/F0002x2) = 1
xml:
<?xml version="1.0" encoding="utf-8"?>
<Dokument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<F0001x1 id="F0001x1"></F0001x1>
<F0002x2 id="F0002x2">1</F0002x2>
</Dokument>
uj5u.com熱心網友回復:
當我嘗試純 JavaScript 時,我對 Firefox 沒有任何問題,請參閱https://jsfiddle.net/2rwszcyq/(它不使用決議器,因為 XPath 不使用任何命名空間):
const xmlSource = `<?xml version="1.0" encoding="utf-8"?>
<Dokument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<F0001x1 id="F0001x1"></F0001x1>
<F0002x2 id="F0002x2">1</F0002x2>
</Dokument>`;
const xmlDoc = new DOMParser().parseFromString(xmlSource, 'application/xml');
const xpathResult = xmlDoc.evaluate('number(Dokument/F0002x2) = 1', xmlDoc);
console.log(xpathResult.booleanValue);
const xmlSource = `<?xml version="1.0" encoding="utf-8"?>
<Dokument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<F0001x1 id="F0001x1"></F0001x1>
<F0002x2 id="F0002x2">1</F0002x2>
</Dokument>`;
const xmlDoc = new DOMParser().parseFromString(xmlSource, 'application/xml');
const xpathResult = xmlDoc.evaluate('number(Dokument/F0002x2) = 1', xmlDoc);
console.log(xpathResult.booleanValue);
或(創建決議器)https://jsfiddle.net/2rwszcyq/1/:
const xmlSource = `<?xml version="1.0" encoding="utf-8"?>
<Dokument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<F0001x1 id="F0001x1"></F0001x1>
<F0002x2 id="F0002x2">1</F0002x2>
</Dokument>`;
const xmlDoc = new DOMParser().parseFromString(xmlSource, 'application/xml');
const xpathResult = xmlDoc.evaluate('number(Dokument/F0002x2) = 1', xmlDoc, xmlDoc.createNSResolver(xmlDoc));
console.log(xpathResult.booleanValue);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506928.html
