我目前正在使用XPath處理Java項目,因爲我不是XPath專家,所以我需要找到一種方法來驗證隨機XPath表達式的語法,而不將它們與XML數據進行匹配。XPath表達式語法驗證
我在網上發現了很多XPath驗證器,不幸的是他們都需要XML數據。
我的當務之急是驗證下面的表達式:
/cXML/Request/OrderRequest/OrderRequestHeader/Extrinsic/@name[NameOrder]/Name
我會很感激在這一個特定的有效性評論...
我目前正在使用XPath處理Java項目,因爲我不是XPath專家,所以我需要找到一種方法來驗證隨機XPath表達式的語法,而不將它們與XML數據進行匹配。XPath表達式語法驗證
我在網上發現了很多XPath驗證器,不幸的是他們都需要XML數據。
我的當務之急是驗證下面的表達式:
/cXML/Request/OrderRequest/OrderRequestHeader/Extrinsic/@name[NameOrder]/Name
我會很感激在這一個特定的有效性評論...
我假設你想驗證語法而不是如果表達式在您的xml或xml架構的上下文中有效。您可以使用compile(..)方法,如果xpath在語法上不正確,它將引發異常。
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//book[author='Abc']/title/text()");
「由於您不是XPath專家」,因此您在XPath表達式中犯的大多數錯誤可能不是語法錯誤,而是語義錯誤。可悲的是,XPath表達式中的大多數錯誤不會被檢測爲語法錯誤或運行時錯誤,而只會導致錯誤的答案。 (XPath在這方面與正則表達式非常相似)。
您的示例就是一個例子。它在語法上是有效的,但決不會選擇任何東西。這是因爲它包含步驟@name[NameOrder]
,它選擇具有NameOrder子元素的所有「name」屬性。屬性從來沒有孩子,所以沒有什麼能滿足這個表達。撒克遜會給你一個警告,但這不是一個語法錯誤。
所以我不認爲你做語法驗證的方法會幫助你很多。
謝謝Michael,實際上這很令人驚訝:XPath標準允許不會選擇任何數據的XPath表達式。在這方面,當然,我的追求沒有太大的目的...... –
謝謝,很高興知道。所以我的追求實際上是在這裏結束:這是我正在尋找的驗證者,它會告訴我語法是否正確,但不幸的是,永遠不會告訴我表達式是否有意義,正如邁克爾指出的那樣...... –