Согласно RDF RFC , URI пространства имен RDF равен http://www.w3.org/1999/02/22-rdf-syntax-ns#
.
Предполагая, что ваш входной XML правильно определяет это пространство имен:
<?xml version="1.0"?>
<outer xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<ultradata xml:id="deadbeef" rdf:resource="http://some-resource/ultralink">Some stuff</ultradata>"
</outer>
Тогда вам нужно использовать то же пространство имен в коде:
static INPUT: &str = r##"<?xml version="1.0"?>
<outer xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<ultradata xml:id="deadbeef" rdf:resource="http://some-resource/ultralink">Some stuff</ultradata>"
</outer>
"##;
fn main() {
let package = sxd_document::parser::parse(INPUT).expect("Invalid XML");
let doc = package.as_document();
let mut context = sxd_xpath::Context::new();
context.set_namespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
let xpath = sxd_xpath::Factory::new().build("//@rdf:resource").expect("Invalid XPath").expect("No XPath");
let value = xpath.evaluate(&context, doc.root()).expect("Cannot evaluate XPath");
if let sxd_xpath::Value::Nodeset(ns) = value {
for n in ns {
println!("{:?}", n);
}
}
}
Отказ от ответственности: я являюсь автором SXD-XPath и SXD-Document