What is the proper way to test for the existance of an optional node? A snipped of my XML is:
<Antenna >
<Mount Model="text" Manufacture="text">
<BirdBathMount/>
</Mount>
</Antenna>
But it could also be:
<Antenna >
<Mount Model="text" Manufacture="text">
<AzEl/>
</Mount>
</Antenna>
The child of Antenna could either be BirdBath or AzEl but not both...
In Delphi XE I have tried:
if (MountNode.ChildNodes.Nodes['AzEl'] <> unassigned then //Does not work
if (MountNode.ChildNodes['BirdBathMount'].NodeValue <> null) then // Does not work
if (MountNode.BirdBathMount.NodeValue <> null) then // Does not work
I use XMLSpy to create the schema and the example XML and they parse correctly. I use Delphi XE to create the bindings and it works on most other combinations fine.
This must have a simple answer that I have just overlooked - but what? Thanks...... Jim
You can use XPath, try this sample.
uses
MSXML;
Var
XMLDOMDocument : IXMLDOMDocument;
XMLDOMNode : IXMLDOMNode;
begin
XMLDOMDocument:=CoDOMDocument.Create;
XMLDOMDocument.loadXML(XmlStr);
XMLDOMNode := XMLDOMDocument.selectSingleNode('//Antenna/Mount/BirdBathMount');
if XMLDOMNode<>nil then
Writeln('BirdBathMount node Exist')
else
begin
XMLDOMNode := XMLDOMDocument.selectSingleNode('//Antenna/Mount/AzEl');
if XMLDOMNode<>nil then
Writeln('AzEl node Exist');
end;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With