将XML名称空间URI解析为Poco DOM C++; 我试图用POCO C++解析SOAP消息的信封根标签中的命名空间URI属性。我正在使用DOMParser来读取它。 我使用以下方法来解析属性。但是,该函数不返回任何属性 Poco::XML::NamedNodeMap * nnm = pDoc->documentElement()->attributes(); std::cout << "Node Name:" << pDoc->documentElement()->nodeName() <<std::endl; std::cout << "NNS size : " << nnm->length() << std::endl;
为什么Dom解析器不能将命名空间URI解析为属性?可以解析它们吗? 下面是SOAP消息将XML名称空间URI解析为Poco DOM C++; 我试图用POCO C++解析SOAP消息的信封根标签中的命名空间URI属性。我正在使用DOMParser来读取它。 我使用以下方法来解析属性。但是,该函数不返回任何属性 Poco::XML::NamedNodeMap * nnm = pDoc->documentElement()->attributes(); std::cout << "Node Name:" << pDoc->documentElement()->nodeName() <<std::endl; std::cout << "NNS size : " << nnm->length() << std::endl;,c++,xml,soap,poco-libraries,C++,Xml,Soap,Poco Libraries,为什么Dom解析器不能将命名空间URI解析为属性?可以解析它们吗? 下面是SOAP消息 <?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&qu
<?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>
uuid:6cd92809-5887-7b13-0ae9-290514f24b6f
78e87394-8ba6-41a7-a4c9-8769306a8a0b
http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches
urn:uuid:229c62c6-0903-246d-05bd-7193031a5f5c
dn:网络视频发射机tds:设备
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
http://192.168.1.160:8000/onvif/device_service
1.
它们不是“属性”。它们是名称空间声明。名称空间声明是XML标准的一部分,就像尖括号和引号一样。这就是为什么它不会出现在DOM中
我强烈建议您在尝试其他内容之前先学习一些关于XML/XSD/SOAP的在线教程。之后,回来编辑你的问题。告诉我们您实际想做什么-如果我们知道真正的目标是什么,我们可能会帮助您更好。感谢您澄清属性和名称空间声明之间的区别。我正在尝试解析SOAP消息,它是WS-Discovery实现的一部分。标记内部有两种类型,每种类型都有不同的名称空间前缀。使用Poco,您可以使用DOM解析器获得给定元素的名称空间URI。根据,如果给定字符串前缀,则无法解析命名空间URI。因为Poco没有;有一个getNamespaces()方法;将文本名称空间前缀转换为相应名称空间URI的正确方法是什么?解析它们的目的是将它们提供给用户我建议您仔细查看。我简要地扫描了Poco文档。根据第一印象,如果名称空间不受支持,我会非常惊讶。如果有帮助,名称空间将出现在每个元素/属性上,因此您应该在这里查找getNamespace()访问器函数。
<?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>