XDocument生成无效的XML

时间:2009-11-03 17:06:59

标签: linq linq-to-xml

我有这段代码

 Dim doc As XDocument = New XDocument( _
  New XDeclaration("1.0", "utf-8", "yes"), _
   New XElement("transaction", _
    New XElement("realm", wcRealm), _
    New XElement("password", wcPassword), _
    New XElement("confirmation_email", wcConfEmail), _
    New XElement("force_subscribe", wcSubscribe), _
    New XElement("optout", wcOptOut), _
    New XElement("command", _
     New XElement("type", wcType), _
     New XElement("list_id", wcListId), _
     From trans As DataRow In table.Rows _
     Order By trans("last") _
     Select New XElement("record", _
       New XElement("email", trans("email")), _
       New XElement("first", trans("first")), _
       New XElement("last", trans("last")), _
       New XElement("company", trans("company")), _
       New XElement("address_1", trans("address_1")), _
       New XElement("address_2", ""), _
       New XElement("city", trans("city")), _
       New XElement("state", trans("state")), _
       New XElement("zip", trans("zip")), _
       New XElement("country", trans("country")), _
       New XElement("phone", trans("phone")), _
       New XElement("fax", trans("fax")), _
       New XElement("custom_source", trans("source")), _
       New XElement("custom_vmail_expire_date", "")))))
        '' # Save XML document at root.
        doc.Save("c:\vj" & saveDate & ".xml")

工作正常a产生正确的XML文件但我通过验证器运行它并得到此错误。

抱歉,我无法验证此文档,因为在第1行它包含一个或多个我无法解释为us-ascii的字节(换句话说,找到的字节在指定的字符编码中不是有效值)。请检查文件内容和字符编码指示。

错误是:ascii“\ xEF”未映射到Unicode

可能导致什么?

3 个答案:

答案 0 :(得分:3)

问题是您有一个尝试验证为ASCII的UTF-8文件。这两个字节是unicode标头。

答案 1 :(得分:1)

验证器不支持UTF8 / UCS-2。将文件保存为ascii(将破坏,因为xml表示它是utf-8)或找到在过去5年内创建的验证器。

修改

注意:如果您想将其另存为US Ascii,请使用new XDeclaration("1.0", "us-ascii", "yes")

答案 2 :(得分:0)

文件保存为UTF-8,开头有字节顺序标记字符(此字符以八位字节0xEF开头)。

由于某些原因你的验证器似乎不喜欢这个角色。严格地说,这个字符是空格,在XML声明之前有空格是无效的。但是,我所知道的大多数解析器都会将其作为unicode编码的指示器而不是将其视为内容。