Bonjour,
Je continue mon exploration laborieuse de XML.
J'essaie de chercher un noeud existant dans ce XML:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
	<specVersion>
		<major>1</major>
		<minor>0</minor>
	</specVersion>
	<device>
		<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
		<friendlyName>ILCE-7S</friendlyName>
		<manufacturer>Sony Corporation</manufacturer>
		<manufacturerURL>http://www.sony.net/</manufacturerURL>
		<modelDescription>SonyDigitalMediaServer</modelDescription>
		<modelName>SonyImagingDevice</modelName>
		<UDN>uuid:000000001000-1010-8000-7A4B879B63A0</UDN>
		<serviceList>
			<service>
				<serviceType>urn:schemas-sony-com:service:ScalarWebAPI:1</serviceType>
				<serviceId>urn:schemas-sony-com:serviceId:ScalarWebAPI</serviceId>
				<SCPDURL/>
				<controlURL/>
				<eventSubURL/>
			</service>
			<service>
				<serviceType>urn:schemas-sony-com:service:DigitalImaging:1</serviceType>
				<serviceId>urn:schemas-sony-com:serviceId:DigitalImaging</serviceId>
				<SCPDURL>/DigitalImagingDesc.xml</SCPDURL>
				<controlURL>/upnp/control/DigitalImaging</controlURL>
				<eventSubURL></eventSubURL>
			</service>
		</serviceList>
		<av:X_ScalarWebAPI_DeviceInfo xmlns:av="urn:schemas-sony-com:av">
			<av:X_ScalarWebAPI_Version>1.0</av:X_ScalarWebAPI_Version>
			<av:X_ScalarWebAPI_ServiceList>
				<av:X_ScalarWebAPI_Service>
					<av:X_ScalarWebAPI_ServiceType>guide</av:X_ScalarWebAPI_ServiceType>
					<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
					<av:X_ScalarWebAPI_AccessType/>
				</av:X_ScalarWebAPI_Service>
				<av:X_ScalarWebAPI_Service>
					<av:X_ScalarWebAPI_ServiceType>accessControl</av:X_ScalarWebAPI_ServiceType>
					<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
					<av:X_ScalarWebAPI_AccessType/>
				</av:X_ScalarWebAPI_Service>
				<av:X_ScalarWebAPI_Service>
					<av:X_ScalarWebAPI_ServiceType>camera</av:X_ScalarWebAPI_ServiceType>
					<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
					<av:X_ScalarWebAPI_AccessType/>
				</av:X_ScalarWebAPI_Service>
				<av:X_ScalarWebAPI_Service>
					<av:X_ScalarWebAPI_ServiceType>avContent</av:X_ScalarWebAPI_ServiceType>
					<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL>
					<av:X_ScalarWebAPI_AccessType/>
				</av:X_ScalarWebAPI_Service>
			</av:X_ScalarWebAPI_ServiceList>
		</av:X_ScalarWebAPI_DeviceInfo>
	</device>
</root>
Mon programme affiche tous les noeuds enfants de 'device', j'obtiens la liste suivante:
deviceType
friendlyName
manufacturer
manufacturerURL
modelDescription
modelName
UDN
serviceList
av:X_ScalarWebAPI_DeviceInfo
Jusque la c'est normal, quand je recherche le noeud 'UDN' pas de soucis, par contre je n'arrive jamais à trouver le noeud 'av:X_ScalarWebAPI_DeviceInfo'. Voici le code qui fait cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.ButtonTestXMLClick(Sender: TObject);
var
  f:TextFile;
  Recherche:String;
  DeviceNode,ServiceListNode : IXMLNode;
  ANode : IXMLNode;
  STitle: WideString;
  i:integer;
Begin
  XMLDoc.LoadFromFile('D:\Astro\Sony\XML.XML');
  XMLDoc.Active:=True;
  if XMLDoc.DocumentElement <> nil then
      memo1.Lines.Assign(XMLDoc.XML);
  XMLDoc.Active:=True;
  DeviceNode := XMLDoc.DocumentElement.ChildNodes.FindNode('device') ;
  for i:=0 to DeviceNode.ChildNodes.Count-1 do
  begin
    memo1.Lines.Add(DeviceNode.ChildNodes[i].NodeName); // j'affiche tous les sous noeuds de 'device'
    Recherche:=DeviceNode.ChildNodes[i].NodeName;
  end;
  ServiceListNode := DeviceNode .ChildNodes.FindNode('UDN');  //pas de soucis le noeud est trouvé
  ServiceListNode := DeviceNode .ChildNodes.FindNode('av:X_ScalarWebAPI_Service'); //IMPOSSIBLE à trouver!!
//  ANode := ServiceListNode;
//  STitle:=ANode.Text;
end;
Merci de vos avis éclairés.