Просмотр исходного кода

xpath.pp:
* text() selector matches text and CDATA nodes, but not comments
* Names of processing instructions are now matched as they should.

git-svn-id: trunk@13915 -

sergei 16 лет назад
Родитель
Сommit
d44c6876cd
1 измененных файлов с 3 добавлено и 3 удалено
  1. 3 3
      packages/fcl-xml/src/xpath.pp

+ 3 - 3
packages/fcl-xml/src/xpath.pp

@@ -1110,13 +1110,14 @@ var
         else if Node.NodeName <> NodeTestString then
         else if Node.NodeName <> NodeTestString then
           exit;
           exit;
       ntTextNode:
       ntTextNode:
-        if not Node.InheritsFrom(TDOMCharacterData) then
+        if not Node.InheritsFrom(TDOMText) then
           exit;
           exit;
       ntCommentNode:
       ntCommentNode:
         if Node.NodeType <> COMMENT_NODE then
         if Node.NodeType <> COMMENT_NODE then
           exit;
           exit;
       ntPINode:
       ntPINode:
-        if Node.NodeType <> PROCESSING_INSTRUCTION_NODE then
+        if (Node.NodeType <> PROCESSING_INSTRUCTION_NODE) or
+         ((NodeTestString <> '') and (Node.nodeName <> NodeTestString)) then
           exit;
           exit;
     end;
     end;
     if ResultNodes.IndexOf(Node) < 0 then
     if ResultNodes.IndexOf(Node) < 0 then
@@ -1947,7 +1948,6 @@ begin
           NextToken;   { skip '('; we know it's there }
           NextToken;   { skip '('; we know it's there }
           if NextToken = tkString then
           if NextToken = tkString then
           begin
           begin
-            // TODO: Handle processing-instruction('name') constructs
             Dest.NodeTestString := CurTokenString;
             Dest.NodeTestString := CurTokenString;
             NextToken;
             NextToken;
           end;
           end;