如何使用jersey和jaxb解析具有前缀的xml标签

33 浏览
0 Comments

如何使用jersey和jaxb解析具有前缀的xml标签

我在一个XML文件中看到了以下这行:

xmlns:android="http://schemas.android.com/apk/res/android"

我也在很多其他的XML文件中见过xmlns

它是什么意思?

admin 更改状态以发布 2023年5月23日
0
0 Comments

它定义了一个XML命名空间

在您的示例中,命名空间前缀为“android”,命名空间URI为"http://schemas.android.com/apk/res/android"

在文档中,您会看到类似这样的元素:

将命名空间前缀视为具有短名称别名的变量,用于完整命名空间URI。就像在XML解析器读取文档时写入的等效物。

注意:您不能在XML实例文档中使用完整的命名空间URI替换命名空间前缀。

请查看关于命名空间的教程:http://www.sitepoint.com/xml-namespaces-explained/

0
0 Comments

它代表 XML 命名空间。

基本上,在 XML 中的每个元素(或属性)都属于一个命名空间,这是一种“限定”元素名称的方式。

想象一下,我和你都发明了自己的 XML。你发明了用于描述人的 XML,我发明了用于描述城市的 XML。我们都包括了一个称为 name 的元素。你的是指人的名字,我的是指城市的名字,是吧——好吧,这有点别扭。


    Rob
    37
    
        London
        123.000
        0.00
    

如果我们把这两个 XML 合并成一个文档,我们该如何区分这两个名字?正如上面所述,有两个 name 元素,但它们的含义不同。

答案是,你和我都会为自己的 XML 分配一个命名空间,并使其唯一:


    Rob
    37
    
        London
        123.000
        0.00
    

现在,我们已经完全限定了我们的 XML,没有任何歧义,关于每个 name 元素的含义。所有以 personxml: 开头的标签都属于你的 XML,所有以 cityxml: 开头的标签都属于我的 XML。

需要注意的几点:

  • 如果排除任何命名空间声明,那么它们将被视为默认命名空间。

  • 如果在不带标识符的情况下声明命名空间,即 xmlns="http://somenamespace" 而不是 xmlns:rob="somenamespace",则它指定文档的默认命名空间。

  • 实际的命名空间本身,通常是一个 IRI,没有实际意义。它应该是唯一的,所以人们倾向于选择自己拥有的 IRI/URI,但它没有更大的意义。有时人们会将 XML 的模式(定义)放置在指定的 IRI 上,但这只是一些人的惯例。

  • 前缀本身也没有影响。唯一重要的是前缀被定义为哪个命名空间。如果以不同前缀开头的多个标签都映射到同一个命名空间(就像下面的代码片段一样),则不重要您使用哪个前缀将给定的元素作为 XML 解析器处理为相同的内容。关键是 XML 解析器不关心您选择的前缀,而只关注它映射的命名空间。前缀只是指向命名空间的间接引用。

    
    

  • 属性可以有命名空间,但通常不会这样做。它们也不会从它们所在的元素继承命名空间,与元素不同(见下文)。

另外,元素命名空间是从父元素继承的。换句话说,我完全可以将上面的 XML 写成以下形式:


    Rob
    37
    
        London
        123.000
        0.00
    

,用于加粗数字123的HTML标签。

0