XML元素值中的命名空间?

Posted

技术标签:

【中文标题】XML元素值中的命名空间?【英文标题】:Namespace in XML element value? 【发布时间】:2016-08-03 14:03:18 【问题描述】:

我最近偶然发现了这个:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">
    <s:Header>
        <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</a:Action>
        <a:MessageID>uuid:21859bf9-6193-4c8a-ad50-d082e6d296ab</a:MessageID>
        <a:ReplyTo>
            <a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address>
        </a:ReplyTo>
        <a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery</a:To>
    </s:Header>
    <s:Body>
        <Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery">
            <d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">dp0:NetworkVideoTransmitter</d:Types>
        </Probe>
    </s:Body>
</s:Envelope>

让我感到困惑的是一行:-

<d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">dp0:NetworkVideoTransmitter</d:Types>

命名空间dp0实际上用在元素值中,这意味着什么吗?

【问题讨论】:

【参考方案1】:

在 XML 级别,不,命名空间前缀在内容中没有任何意义——命名空间和命名空间前缀是纯粹的标记级结构。

此外,任何在内容中使用命名空间前缀的应用程序都必须注意只关心前缀绑定到的命名空间,而不是前缀本身。

最后,由于命名空间前缀(dp0,这里)除了通过它与命名空间值(http://www.onvif.org/ver10/network/wsdl)的关联之外是无关紧要的,所以命名空间前缀的数字0 后缀也无关紧要。通常,它只是一个以编程方式附加的计数器,以确保命名空间前缀是唯一的。

【讨论】:

以上是关于XML元素值中的命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

XML名命空间

命名空间“http://yyy”中的子元素“xxx”无效,而 xml 中实际上没有额外的命名空间设置

使用命名空间迭代 xml 中的元素

LINQ to XML - 如何修复根元素中的默认命名空间

XML的命名空间

XML 命名空间(XML Namespaces)