我想撰寫一個函式來簡單地驗證獨立于任何 XML/HTML 的 XPath 運算式的語法(因此它會捕獲像 //p[text(}="Hello"] 之類的東西有錯字),但我不能似乎找到了完整的 xpath 規范。
uj5u.com熱心網友回復:
在W3C的XPath的建議是XPath的官方規格:
- XML 路徑語言 (XPath) 1.0 版
- XML 路徑語言 (XPath) 2.0(第二版)
- XML 路徑語言 (XPath) 3.1
如果您必須從頭開始撰寫 XPath 決議器,那么至少需要閱讀其中之一。如果您真的不需要從頭開始撰寫 XPath 決議器,您可以簡單地使用現有庫并檢查回傳值或捕獲任何決議例外以確定傳遞的 XPath 運算式的格式是否正確。
uj5u.com熱心網友回復:
除了官方規范之外,如果您的目標是撰寫語法檢查器,那么有一些工具可以幫助您,例如這些語法的語法和決議器生成器,例如https://bottlecaps.de/rex/所以使用那里的語法,例如 XPath 3.1 的語法,您可以生成代碼以檢查許多目標語言的語法,例如 JavaScript ( https://martin-honnen.github.io/xpath31fiddle/js/RExXPath31Fast.js )然后讓您的代碼使用該決議器和 eg 檢查語法錯誤
function parseExample(xpath31Expression) {
try {
xpath31Parser = new RExXPath31Fast(xpath31Expression);
xpath31Parser.parse_XPath();
console.log(`${xpath31Expression} is fine.`);
}
catch (pe) {
if (pe instanceof xpath31Parser.ParseException) {
console.log(`Error in ${xpath31Expression}:`);
console.log(xpath31Parser.getErrorMessage(pe));
}
}
}
parseExample(`//p[.="Hello"]`);
parseExample(`//p[text(}="Hello"]`);
<script src="https://martin-honnen.github.io/xpath31fiddle/js/RExXPath31Fast.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401035.html
