C# DTD必须在文档根元素之前定义
我正在以编程方式创建一个XML文件。要创建起始标记,我有以下代码:C# DTD必须在文档根元素之前定义,c#,asp.net,.net,xml,vb.net,C#,Asp.net,.net,Xml,Vb.net,我正在以编程方式创建一个XML文件。要创建起始标记,我有以下代码: Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customers></Customers> 抛出错误“必须在文档根元素之前定义DTD” 虽然我可以捕获错误,但我认为在创建XML时可能犯了一些错误(XML不是我的强项) 一些网站建议添加DTD(例如)。我不知道这是否正确,或者我是否
Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customers></Customers>
抛出错误“必须在文档根元素之前定义DTD”
虽然我可以捕获错误,但我认为在创建XML时可能犯了一些错误(XML不是我的强项)
一些网站建议添加DTD(例如
)。我不知道这是否正确,或者我是否可以忽略错误,或者是否有更好的方法来声明这一点
更新:当我直接在Chrome中查看页面时,它将XML显示为
<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>
下面是一个示例,显示了xml的生成/保存和加载,没有错误
Dim XmlFile As String = "C:\\Temp\\TestData.xml"
Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8"?><Customers></Customers>
For ForCount As Integer = 0 To 10
XDoc.Root.Add("<customer>Customer" & ForCount.ToString & "</customer>")
Next
XDoc.Save(XmlFile)
Dim XDocReader As XDocument = XDocument.Load(XmlFile)
Dim XmlFile As String=“C:\\Temp\\TestData.xml”
作为XDocument的Dim XDoc=
对于ForCount As Integer=0到10
XDoc.Root.Add(“客户”&ForCount.ToString&”)
下一个
保存(XmlFile)
Dim XDocReader作为XDocument=XDocument.Load(XmlFile)
此外,听起来您可能正在使用web服务。使用fiddler验证您的web服务在提供数据时没有添加该属性。我看不出您是如何导出XML的。确保您不仅仅是在XDoc上执行
.toStarting
,这将只生成内部XML。删除standalone属性,这仅在您有DTD而没有DTD时才需要。我尝试删除standalone=“yes”,尝试将其设置为standalone=“no”,但出现了相同的错误?更新:我添加了一个StringWriter并将其传入。这最初解决了问题,但现在我得到了XML声明,其中包括UTF-16编码(尽管我没有提供任何编码)和错误“没有Unicode字节顺序标记。无法切换到Unicode”。阅读此错误有一些解决方法,但不确定我是否可以将其改编为我的代码,或者是否必须重写此错误?默认情况下,StringWriter是UTF-16。您可以将其更改为UTF-8。使用UTF-8搜索输出StringWriter。我没有现成的例子来说明这一点。我所做的是Response.Write(Xdoc.Declaration&Xdoc.Tostring)。我想这应该没问题吧?在此之后没有错误(或到目前为止没有错误)
Dim Xdoc As XDocument = XDocument.Load(UrlToXmlFile)
<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>
<?xml version="1.0"?>
<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>
<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>
XDoc.Save(Sr)
Response.Clear()
Response.Buffer = True
Response.Charset = ""
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = "application/xml"
Response.Write(Sr.GetStringBuilder.ToString)
Response.Flush()
Response.End()
Dim XmlFile As String = "C:\\Temp\\TestData.xml"
Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8"?><Customers></Customers>
For ForCount As Integer = 0 To 10
XDoc.Root.Add("<customer>Customer" & ForCount.ToString & "</customer>")
Next
XDoc.Save(XmlFile)
Dim XDocReader As XDocument = XDocument.Load(XmlFile)