当字符串值中有斜线符号时如何使用 OmniXML 在 XML 中搜索
How to search in XML with OmniXML when you have a slash sign inside string value
我正在使用 Delphi7、OmniXML。
在我的 xml 中,我有一个包含“/”的字段
XML:
...
<R2>002-000004/13</R2>
...
当我在 XML 中搜索包含符号“/”的值时
我的 OmniXml returns 错误。
iNodeKupac := FXMLDocument.SelectSingleNode(
'//[R2=''' + '002-000004/13' + ''']'
);
如何对该字段进行搜索?
更改了 OmniXMLPath 单元中的 PosEX,现在可以使用了。
function TXMLXPathEvaluator.PosEx(ch: WideChar; const s: XmlString; offset: integer = 1): integer;
var
quoteCount, startIndex, stopIndex: integer;
startText, stopText : String;
begin
quoteCount := 0;
startText := ''; startIndex := 0;
stopText := ''; stopIndex := 0;
for Result := offset to Length(s) do begin
if (s[Result] = '=') and (startText = '') then begin
startText := '=';
startIndex := Result;
end
else if (s[Result] = '''') and (startText = '=') and ((startIndex+1) = Result) then begin
startText := '=''';
startIndex := -1;
end
else begin
startText := '';
startIndex := 0;
end;
if (s[Result] = '''') and (stopText = '') then begin
stopText := '''';
stopIndex := Result;
end
else if (s[Result] = ']') and (stopText = '''') and ((stopIndex+1) = Result) then begin
stopText := ''']';
stopIndex := -1;
end
else begin
stopText := '';
stopIndex := 0;
end;
if startIndex = -1 then Inc(quoteCount);
if stopIndex = -1 then Dec(quoteCount);
if (s[Result] = ch) and (quoteCount = 0) then
Exit;
end;
Result := 0;
end; { TXMLXPathEvaluator.PosEx }
我正在使用 Delphi7、OmniXML。
在我的 xml 中,我有一个包含“/”的字段
XML:
...
<R2>002-000004/13</R2>
...
当我在 XML 中搜索包含符号“/”的值时 我的 OmniXml returns 错误。
iNodeKupac := FXMLDocument.SelectSingleNode(
'//[R2=''' + '002-000004/13' + ''']'
);
如何对该字段进行搜索?
更改了 OmniXMLPath 单元中的 PosEX,现在可以使用了。
function TXMLXPathEvaluator.PosEx(ch: WideChar; const s: XmlString; offset: integer = 1): integer;
var
quoteCount, startIndex, stopIndex: integer;
startText, stopText : String;
begin
quoteCount := 0;
startText := ''; startIndex := 0;
stopText := ''; stopIndex := 0;
for Result := offset to Length(s) do begin
if (s[Result] = '=') and (startText = '') then begin
startText := '=';
startIndex := Result;
end
else if (s[Result] = '''') and (startText = '=') and ((startIndex+1) = Result) then begin
startText := '=''';
startIndex := -1;
end
else begin
startText := '';
startIndex := 0;
end;
if (s[Result] = '''') and (stopText = '') then begin
stopText := '''';
stopIndex := Result;
end
else if (s[Result] = ']') and (stopText = '''') and ((stopIndex+1) = Result) then begin
stopText := ''']';
stopIndex := -1;
end
else begin
stopText := '';
stopIndex := 0;
end;
if startIndex = -1 then Inc(quoteCount);
if stopIndex = -1 then Dec(quoteCount);
if (s[Result] = ch) and (quoteCount = 0) then
Exit;
end;
Result := 0;
end; { TXMLXPathEvaluator.PosEx }