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

时间:2016-03-10 16:02:03

标签: c# asp.net .net xml vb.net

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

Dim XDoc As XDocument = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customers></Customers>

然后循环遍历数据,使用Root.Add方法添加所需的元素。 XML成功显示在浏览器中。

Xdoc.Root.Add(<customer>
                 <fields>
              </customer>

当某些客户端连接到此XML数据时,如果没有要检索的数据,则页面显示为:

<?xml version="1.0"?>
<Customers/>

从.NET项目中读取XML URL时:

Dim Xdoc As XDocument = XDocument.Load(UrlToXmlFile)

必须在抛出文档根元素之前定义错误“ DTD”。

虽然我可以捕获错误,但我想也许我在创建XML时可能做错了(XML不是我的强项)。

有些网站建议添加DTD(例如<!DOCTYPE note SYSTEM "Note.dtd">)。我不知道这是否正确,或者我是否可以忽略错误或者是否有更好的方法来声明这个错误?

更新:当我直接在Chrome中查看该页面时,它会将XML显示为

<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>
IE中的

显示为

<?xml version="1.0"?>
<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>

但是当我查看“查看来源”时,在两个浏览器中都会显示

<Customers>
<customer>....</customer>
<customer>....</customer>
</Customers>

我不知道这会是个问题吗?

更新2

    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()

1 个答案:

答案 0 :(得分:1)

以下示例显示了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)

听起来您可能正在使用网络服务。在提供数据时,使用fiddler验证您的Web服务未添加该属性。我不知道你是如何导出XML的。确保您不只是在XDoc上执行.ToSrting,这只会生成内部XML。