Я хотел сопоставить конкретный блок if в java
...
...
if(isTrue){
doAction();
}
...
...
}
. Если я использую regExp
if \(isTrue(.|\n)*}
, он включал замыкающую скобку для блока метода, поэтому я использовал
if \(!isTrue([^}.]|\n)*}
, чтобы исключить заключительную скобку из соответствия шаблону.
Ваш XML-файл использует нестандартное пространство имен rdf
, но не определяет его. Вам необходимо определить пространство имен в XML:
<organisation xml:id="a17649"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
Некоторые анализаторы XML позволяют объявлять пространства имен в вашем коде вне документа XML, но я не нашел ничего подобного после быстрого просмотра в sxd_document
документах .
Учитывая сообщение об ошибке, я ожидаю, что вам нужно объявить пространство имен rdf
, прежде чем использовать его в имени атрибута rdf:resource
.
(Ваша проблема не имеет ничего общего с XPath - она завершается неудачно при попытке проанализировать XML до запуска какого-либо кода XPath.)
Ваш код синтаксического анализа XML должен работать по счастливому пути, когда содержимое XML корректно.
Несмотря на то, что он работает без проблем в «счастливом пути», поскольку вы используете expect
в коде вместо обработки ошибок, программа паникует в сценарии ошибок.
Вы можете изменить код на следующий, чтобы лучше распечатать ошибку:
let package = parser::parse(&contents);
match package {
Ok(package) => {
let document = package.as_document();
let value = evaluate_xpath(&document, "/root").expect("XPath evaluation failed");
println!("value: {:?}", value);
}
Err(err) => {
println!("{:?}", err);
}
}
После этого исправления вы заметите, что код печатает ошибку UnknownNamespacePrefix
.
Эта ошибка возникает, когда содержимое XML имеет пространства имен, которые не объявлены в самом файле XML.
В вашем XML-файле вам нужно указать свои пространства имен, которые вы не указали для следующего:
<organisation xml:id="a17649">
Вам необходимо добавить пространство имен:
<organisation xml:id="a17649" xmlns:rdf="http://www.w3.org/1999/xhtml">
Даже один раз вы объявили rdf
пространство имен таким образом, вы также используете пространство имен dbk
, которое, вероятно, зависит от самого вашего проекта. Вам также нужно будет указать это пространство имен:
<organisation xml:id="a17649" xmlns:rdf="http://www.w3.org/1999/xhtml" xmlns:dbk="/path/to/dbk">
После этих изменений ваша проблема должна быть решена