首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Poco C++中将XML名称空间URI解析为属性

在Poco C++中将XML名称空间URI解析为属性
EN

Stack Overflow用户
提问于 2020-08-24 15:35:49
回答 1查看 260关注 0票数 0

我正在尝试使用Poco c++解析SOAP消息的信封根标记中的命名空间URI属性。我正在使用一个DOMParser来阅读它。我使用下面的方法来解析属性。但是,函数没有返回任何属性。

代码语言:javascript
运行
复制
Poco::XML::NamedNodeMap * nnm = pDoc->documentElement()->attributes();
std::cout << "Node Name:" << pDoc->documentElement()->nodeName() <<std::endl;
std::cout << "NNS size : " << nnm->length() << std::endl;

运行上述代码的结果

代码语言:javascript
运行
复制
Node Name: Envelope
NNS size : 0

为什么Dom解析器不能将名称空间URI解析为属性?可以解析它们吗?

下面是SOAP消息

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope
    xmlns:s="http://www.w3.org/2003/05/soap-envelope"
    xmlns:enc="http://www.w3.org/2003/05/soap-encoding"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    xmlns:wsa5="http://www.w3.org/2005/08/addressing"
    xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery"
    xmlns:dn="http://www.onvif.org/ver10/network/wsdl"
    xmlns:tt="http://www.onvif.org/ver10/schema"
    xmlns:tds="http://www.onvif.org/ver10/device/wsdl">
    <s:Header>
        <wsa:MessageID>uuid:6cd92809-5887-7b13-0ae9-290514f24b6f</wsa:MessageID>
        <wsa:RelatesTo>78e87394-8ba6-41a7-a4c9-8769306a8a0b</wsa:RelatesTo>
        <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
        <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action>
    </s:Header>
    <s:Body>
        <d:ProbeMatches>
            <d:ProbeMatch>
                <wsa:EndpointReference>
                    <wsa:Address>urn:uuid:229c62c6-0903-246d-05bd-7193031a5f5c</wsa:Address>
                </wsa:EndpointReference>
                <d:Types>dn:NetworkVideoTransmitter tds:Device</d:Types>
                <d:Scopes>onvif://www.onvif.org/location/country/china onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/name/IP-Camera onvif://www.onvif.org/hardware/HI3518C onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/Profile/T onvif://www.onvif.org/Profile/G onvif://www.onvif.org/Profile/C onvif://www.onvif.org/Profile/A</d:Scopes>
                <d:XAddrs>http://192.168.1.160:8000/onvif/device_service</d:XAddrs>
                <d:MetadataVersion>1</d:MetadataVersion>
            </d:ProbeMatch>
        </d:ProbeMatches>
    </s:Body>
</s:Envelope>
EN

回答 1

Stack Overflow用户

发布于 2020-08-24 16:17:14

它们不是“属性”。它们是名称空间声明。名称空间声明是XML标准的一部分,如尖括号和引号。这就是为什么它没有出现在DOM中的原因。

我强烈建议您在尝试其他内容之前,先学习一些关于XML/XSD/SOAP的在线教程。在那之后,回来编辑你的问题。告诉我们你到底想做什么--如果我们知道真正的目标是什么,我们可能会做得更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63564185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档