diff --git a/wst/trunk/base_soap_formatter.pas b/wst/trunk/base_soap_formatter.pas index 958ef82b7..a3c120126 100644 --- a/wst/trunk/base_soap_formatter.pas +++ b/wst/trunk/base_soap_formatter.pas @@ -2137,10 +2137,10 @@ function TEmbeddedArrayStackItem.CreateList(const ANodeName: string): TDOMNodeLi begin if ScopeObject.HasChildNodes() then begin {$IFDEF WST_DELPHI} - Result := FilterList(ScopeObject.childNodes,ANodeName); + Result := FilterList(ScopeObject.ChildNodes,ANodeName); {$ELSE} - Result := {$IFNDEF FPC_211}TDOMNodeList{$ELSE}TDOMElementList{$ENDIF}.Create(ScopeObject,ANodeName); -{$ENDIF} + Result := FilterList(ScopeObject,ANodeName); +{$ENDIF WST_DELPHI} end else begin Result := nil; end; diff --git a/wst/trunk/wst_fpc_xml.pas b/wst/trunk/wst_fpc_xml.pas index a2fe17824..7a422c807 100644 --- a/wst/trunk/wst_fpc_xml.pas +++ b/wst/trunk/wst_fpc_xml.pas @@ -9,6 +9,22 @@ uses {$INCLUDE wst.inc} {$INCLUDE wst_delphi.inc} +type + + { TDOMNodeSelectListImp } + + TDOMNodeSelectListImp = class(TDOMNodeList) + private + FFilter: DOMString; + FUseFilter: Boolean; + protected + procedure BuildList(); override; + public + constructor Create(ANode: TDOMNode; const AFilter: DOMString); + end; + + function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ; + function GetNodeItemsCount(const ANode : TDOMNode): Integer; function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF} function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF} @@ -88,4 +104,38 @@ begin end; end; +function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ; +begin + Result := TDOMNodeSelectListImp.Create(ANode,ANodeName); +end; + +{ TDOMNodeSelectListImp } + +type + TDOMNodeCracked = class(TDOMNode); +procedure TDOMNodeSelectListImp.BuildList(); +var + Child: TDOMNode; +begin + FList.Clear; + FRevision := TDOMNodeCracked(FNode).GetRevision(); + + Child := FNode.FirstChild; + while ( Child <> nil ) do begin + if ( Child.NodeType = ELEMENT_NODE ) and + ( ( not FUseFilter ) or ( TDOMElement(Child).TagName = FFilter ) ) + then begin + FList.Add(Child); + end; + Child := Child.NextSibling + end; +end; + +constructor TDOMNodeSelectListImp.Create(ANode: TDOMNode; const AFilter: DOMString); +begin + inherited Create(ANode); + FFilter := AFilter; + FUseFilter := ( FFilter <> '*' ); +end; + end.