Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML中的名称空间_Xml_Namespaces - Fatal编程技术网

XML中的名称空间

XML中的名称空间,xml,namespaces,Xml,Namespaces,我正在浏览以前的考试集,其中一个问题与XML文档中名称空间的使用有关。问题如下: 以下XML文档中元素foo的名称空间是什么 <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org"> <namespace xmlns:xyz="http://www.foo.org"/> <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">

我正在浏览以前的考试集,其中一个问题与XML文档中名称空间的使用有关。问题如下:


以下XML文档中元素foo的名称空间是什么

<xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
    <namespace xmlns:xyz="http://www.foo.org"/>
    <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">
        <foo foo:xmlns="http://www.bar.com"/>
    </def>
</xyz>

  • 空字符串

  • 我最初的想法是选择2。我注意到他们在foo元素标记中交换了foo和xmlns。这有什么影响?这仍然被认为是格式良好的XML吗

    我的第二个想法是选项1,因为在xyz元素标记中,它们将foo的名称空间定义为“”

    然而,检查答题纸,它说正确的答案是选项3。为什么会这样?这可能是答案键中的错误吗?如果不是,为什么选项2不正确


    编辑:小修正

    正确答案是3

    让我们详细回顾一下声明的名称空间是什么,以便找出原因

    第一行:

    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
    
    它附加了
    http://www.foo.org
    指向
    xyz
    前缀的命名空间URI<代码>标签已附加到
    http://baz.net
    此时的命名空间URI,因为它没有前缀

    第三行

    <namespace xmlns:xyz="http://www.foo.org"/>
    
    <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">
    
    <foo foo:xmlns="http://www.bar.com"/>
    
    这里有一个技巧,
    foo:xmlns
    不是一个命名空间声明,因为它不是以
    xmlns
    开头的。它是属性
    xmlns
    ,前缀为
    foo
    (即使这里的属性正确,也不建议将其命名为xmlns)。元素
    没有前缀,由于从一开始就使用
    xmlns
    ,即
    http://baz.net
    (另一个原因是在文档中的任何其他地方都找不到另一个
    xmlns

    注意:

    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
    
    在您的文档中有这样一行:

    <foo xmlns="http://www.bar.com"/>
    
    
    

    这次正确答案应该是2。

    正确答案确实是3

    让我们详细回顾一下声明的名称空间是什么,以便找出原因

    第一行:

    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
    
    它附加了
    http://www.foo.org
    指向
    xyz
    前缀的命名空间URI<代码>标签已附加到
    http://baz.net
    此时的命名空间URI,因为它没有前缀

    第三行

    <namespace xmlns:xyz="http://www.foo.org"/>
    
    <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">
    
    <foo foo:xmlns="http://www.bar.com"/>
    
    这里有一个技巧,
    foo:xmlns
    不是一个命名空间声明,因为它不是以
    xmlns
    开头的。它是属性
    xmlns
    ,前缀为
    foo
    (即使这里的属性正确,也不建议将其命名为xmlns)。元素
    没有前缀,由于从一开始就使用
    xmlns
    ,即
    http://baz.net
    (另一个原因是在文档中的任何其他地方都找不到另一个
    xmlns

    注意:

    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
    
    在您的文档中有这样一行:

    <foo xmlns="http://www.bar.com"/>
    
    
    
    这次正确答案应该是2。

    那么你怎么能说这个解释是正确的呢?可以查询

    DECLARE @t XML = '
    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
        <namespace xmlns:xyz="http://www.foo.org"/>
        <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">
            <foo foo:xmlns="http://www.bar.com"/>
        </def>
    </xyz>';
    
    这样就证明了他是正确的。

    那么你怎么知道他的解释是正确的呢?可以查询

    DECLARE @t XML = '
    <xyz xmlns="http://baz.net" xmlns:foo="http://www.foo.org">
        <namespace xmlns:xyz="http://www.foo.org"/>
        <def xmlns:dwebtek="http://www.cs.au.dk/dWebTek">
            <foo foo:xmlns="http://www.bar.com"/>
        </def>
    </xyz>';
    

    这证明了他是。

    非常感谢。我现在明白问题所在了。把前缀命名为foo,把元素命名为foo,这让我很困惑。谢谢你的帮助!非常感谢你。我现在明白问题所在了。把前缀命名为foo,把元素命名为foo,这让我很困惑。谢谢你的帮助!从技术上讲,名称空间不能是空字符串,但可以是“空名称空间”。从技术上讲,名称空间不能是空字符串,但可以是“空名称空间”。