Ваш код синтаксического анализа 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">
После этих изменений ваша проблема должна быть решена