尝试使用ChildNodes.FindNode在XML中查找节点

use*_*821 4 xml delphi

我是XML的新手,我正在尝试使用Delphi XE TXMLDocument来访问以下XML中的数据

<?xml version="1.0" encoding="UTF-8" ?>
<sfc:SFC xmlns:sfc="AWS_SFC">
    <ID>4294967295</ID>
    <SFC_TYPE>
        <WindSpeed>18</WindSpeed>
        <WindDir>123.6</WindDir>
        <Temperature>22.9</Temperature>
        <Pressure>1013.25</Pressure>
        <Humidity>57.9</Humidity>
        <DewPoint>16.8</DewPoint>
    </SFC_TYPE>'
    <Location>
        <longitude>18.5</longitude>
        <latitude>-34.5</latitude>
        <altitude>50.8</altitude>
    </Location>
    <StampDateTime>2012-12-17T09:30:47.0Z</StampDateTime>
</sfc:SFC>
Run Code Online (Sandbox Code Playgroud)

我的代码开头像这样:

var
  SFC_Info: IXMLNode;
  SFC_Type: IXMLNode;
begin
  SFC_Info := XMLDocument1.DocumentElement;
  SFC_Type := SFC_Info.ChildNodes.First;
  while (SFC_Type.NodeName <> 'SFC_TYPE') do
    SFC_Type := SFC_TYPE.NextSibling;
  memDebug.Lines.Add('Wind speed = ' + SFC_Type.ChildNodes.FindNode('WindSpeed').Text);
  etc
Run Code Online (Sandbox Code Playgroud)

这样做我想要的,但使用循环似乎很乱.我原本以为可以通过实现访问'SFC_TYPE'节点

  SFC_Type := SFC_Info.ChildNodes.FindNode('SFC_TYPE');
Run Code Online (Sandbox Code Playgroud)

但是这会返回nil.

我错过了什么吗?

who*_*ddy 10

根节点使用命名空间(AWS_SFC).因此,XML文档中的子节点必须具有相同的命名空间,而XML文档中则不是这种情况.

只需NameSpaceURIFindNode过程中添加一个空白参数,它就会找到该节点:

SFC_Type := SFC_Info.ChildNodes.FindNode('SFC_TYPE', '');
Run Code Online (Sandbox Code Playgroud)