Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DTD必须在文档根元素之前定义_C#_Asp.net_.net_Xml_Vb.net - Fatal编程技术网

C# DTD必须在文档根元素之前定义

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(例如)。我不知道这是否正确,或者我是否

我正在以编程方式创建一个XML文件。要创建起始标记,我有以下代码:

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)