最近,使用我的.NET应用程序的用户在运行时遇到了有关此错误消息的一些问题:doctype' is an unexpected token. the expected token is 'doctype'
。
有趣的是,数百人中只有少数人遇到过这个问题。
这就是我的XML文件的样子:
<?xml version='1.0'?>
<build>
<row>
<car>Type</car>
<enum>12</enum>
</row>
<row>
<car>Type1</car>
<enum>14</enum>
</row>
<row>
<car>Type2</car>
<enum>15</enum>
</row>
</build>
我在.NET应用程序中实际做的是循环遍历XML元素并在每个循环上显示<car>
。
我一直在尝试推荐人们安装最新的.NET Framework库,但这没有帮助。
导致此错误的原因是什么?如何修复?
vb.net代码片段:
Dim client As WebClient = New WebClient()
client.Encoding = System.Text.Encoding.UTF8
Dim data As String = client.DownloadString("http://mywebsite.com/code.php")
While client.IsBusy
Threading.Thread.Sleep(100)
End While
Dim doc As New System.Xml.XmlDocument
doc.LoadXml(data)
For Each row As System.Xml.XmlElement In list
'proceed the element(s)...
Next
^ code.php,负责输出XML字符串:
<?php
header('Content-Type: text/xml; charset=utf-8;');
ini_set('default_mimetype', "text/xml");
ini_set('default_charset', "utf-8");
echo "<?xml version='1.0'?>
<build>";
foreach ($_engine as $line)
{
echo '<row><car>' . htmlspecialchars($line->car) . '</car><enum>' . (int)$line->enum . '</enum></date></row>';
}
echo "</build>";
?>
答案 0 :(得分:0)
我可以通过在<?xml version='1.0'?>
之后添加以下行来重现此错误:
<!doctype html public "-//w3c//dtd xhtml 1.1//en" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd">
这将引发错误:
'doctype'是一个意外的令牌。预期的令牌是'DOCTYPE'
请注意,预期令牌为DOCTYPE
大写。我相信返回的XML文件以某种方式包含这个元素。您可以尝试删除根元素之前和之后的所有内容,如下所示:
Const startTag As String = "<build>"
Const endTag As String = "</build>"
Dim startIndex As Integer = data.IndexOf(startTag, 0, data.Length, StringComparison.OrdinalIgnoreCase)
Dim endIndex As Integer = If((startIndex > -1), data.LastIndexOf(endTag, (data.Length - 1), data.Length), -1)
If ((startIndex > -1) AndAlso (endIndex > -1)) Then
data = ("<?xml version='1.0'?>" & Environment.NewLine & data.Substring(startIndex, ((endIndex - startIndex) + endTag.Length)))
End If
然后加载XmlDocument:
Dim doc As New System.Xml.XmlDocument
doc.LoadXml(data)