xml - 如何使用 SXD-XPath 选择命名空间属性的值?

标签 xml parsing xpath rust rdf

我有以下 XML:

<ultradata xml:id="deadbeef" rdf:resource="http://some-resource/ultralink">Some stuff</ultradata>

我想获取 rdf:resource 的值,但我不知道如何进行命名空间。我的命名空间注册:

let mut context = sxd_xpath::Context::new();
context.set_namespace("xml", "http://www.w3.org/XML/1998/namespace");
context.set_namespace("rdf", "https://www.w3.org/1999/02/22-rdf-syntax-ns");

https://www.w3.org/1999/02/22-rdf-syntax-ns 似乎没有资源 .

@xml:id 有效,但 @rdf:resource 无效。当然,来自相同的上下文。

这个命名空间的东西真的很奇怪。如何选择 rdf:resource 的值?

最佳答案

根据 the RDF RFC ,RDF 命名空间 URI 是 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 的作者

关于xml - 如何使用 SXD-XPath 选择命名空间属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276554/

相关文章:

java - 禁用宽度继承?

java - 获取文件过早结束异常

c++ - 用于单行多变量声明的 clang ast visitor

c - 如何在迭代字符串指针后从 void 函数获取指针

html - 如何根据子元素的值获取节点的位置

PHP Xpath 为属性名称为 ="author"的节点提取值

c# - XML namespace 和 XPath

c# - MSXML 创建 XML "header"

c# - 如何在 string.Format 中引用数组值?

xml - maven pom 文件有 html 代码而不是 xml