我如何解决这个问题?
Tdm = class(TDataModule)
HTTP: TIdHTTP;
XMLDoc: TXMLDocument;
...
var sStory: String;
...
sStory:= GetHTTP('http://localhost/MultiPlay_PHP/contentlesson.php');
begin
xmlDoc.XML.Text := sStory;
xmlDoc.Active :=true;
StartItemNode := XMLDoc.DocumentElement.ChildNodes.First;
ANode := StartItemNode;
错误从xmlDoc.Active代码开始。
<?xml version="1.0" encoding="UTF-8" ?>
- <WORDSET>
- <WORD NUMBER="1">
<ENGLISH>beat</ENGLISH>
<KOREAN>두드리다</KOREAN>
</WORD>
Project.exe引发了异常类EDOMParseError,并显示消息'在文本内容中找到了无效字符。 但是当我从XML中删除韩文字符时,代码就可以了。
答案 0 :(得分:2)
我看到你使用Indy的http组件。当你得到一个URL时,你必须提供一个流(你可能在你的GetHTTP方法中做)。当该流包含xml而不包含任何其他内容时,请使用LoadFromStream
的{{1}}方法直接使用该流。 TXMLDocument将确定编码,因此它可以避免使用字符串和编码。
当然,为了这个工作,contentlesson.php必须返回正确的XML(由Robert Love评论)。如果您发布的那部分正是您从该页面获得的部分,那么当您收到错误时,这不是您的错。
答案 1 :(得分:1)
我怀疑您的网络服务器没有返回UTF-8编码的内容。您可以尝试通过将sStory: String
的声明更改为sStory : UTF8string
使用以下代码块我无法复制问题。
var
sStory : Utf8String;
begin
sStory := '<?xml version="1.0" encoding="UTF-8" ?>' +
'<WORDSET>' +
'<WORD NUMBER="1">' +
'<ENGLISH>beat</ENGLISH>' +
'<KOREAN>두드리다</KOREAN>' +
'</WORD>' +
'</WORDSET>';
xmlDoc.XML.Text := sStory;
xmlDoc.Active := true;
end;