【问题标题】:How does XML Namespaces work?XML 命名空间如何工作?
【发布时间】:2016-03-13 06:34:34
【问题描述】:

我想知道 XML 命名空间是如何工作的。我读到它们应该是独一无二的等等。但是没有任何资源说明它们是如何工作的。

我的意思是我有类似 XML 节点

<name xml:lang="en" type="abc">A name</name>

要使用 php (SimpleXML) 提取 xml:lang,我需要使用以下代码:

$obj->attributes('http://www.w3.org/XML/1998/namespace');

此链接如何定义/告诉 SimpleXML 提取 xml:* 属性?我只在那里看到网页,而不是定义这个命名空间的单一定义。

正如How do XML namespaces work 所说,URL 永远不会被解析。但我解析的文档不包含此链接(命名空间定义)。

此外,在上面的问题中,有定义的命名空间。他们在哪里定义这个命名空间正是human:*

【问题讨论】:

    标签: php xml namespaces


    【解决方案1】:

    “这个链接如何定义/告诉 SimpleXML 提取 xml:* 属性?我只看到那里的网页,而不是定义这个命名空间的单个定义。”

    xml: 是在 XML 规范中预定义的特殊前缀。它是命名空间名称http://www.w3.org/XML/1998/namespace 绑定的前缀,这就是“链接”连接到前缀xml 的方式。请参阅:W3C : The "xml:" Namespace

    “另外,在上面的问题中,有定义的命名空间。他们在哪里定义这个命名空间正是human:*?”

    前缀human 未在该 XML 中的任何位置声明。不过我认为这是错误的,因为 XML 在其当前形式中的格式不正确。 human:body 元素的前缀声明应该是 xmlns:human 而不是 xmlns:html

    <human:body xmlns:human="http://www.example.com/human/">
        <human:height>182 cm</human:height>
        <human:weight>83 kg</human:weight>
    </human:body>
    

    【讨论】:

    • 所以基本上xmlns:human="http://www.example.com/human/" 定义了由http://www.example.com/human/ 标识符标识的XML 命名空间human(用于提取/访问的标识符)?
    • @Gacek 是的,这部分定义了前缀 human 到命名空间名称/uri http://www.example.com/human/ 的映射
    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-09-05
    • 2011-12-05
    • 2013-05-15
    • 2015-02-18
    • 2010-10-30
    相关资源
    最近更新 更多