2009-11-03 2 views
2

У меня есть этот кодXDocument производства недопустимого 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") 

, который работает оштрафовать производит соответствующий файл XML, НО я запускаю его через валидатор и получить эту ошибку.

К сожалению, я не могу проверить этот документ, потому что в строке 1 он содержит один или несколько байтов, которые я не могу интерпретировать как us-ascii (другими словами, найденные байты являются недопустимыми значениями в указанном кодировке символов). Проверьте содержимое файла и символ кодировки.

Ошибка: ASCII "\ XEF" не отображает в Unicode

Что может быть причиной этого?

ответ

3

Проблема в том, что у вас есть файл UTF-8, который вы пытаетесь проверить как ASCII. Эти 2 байта являются заголовками юникода.

1

Валидатор не поддерживает UTF8/UCS-2. Или сохраните файл как ascii (который сломается, так как xml говорит, что это utf-8) или найти валидатор, который был создан за последние 5 лет.

EDIT:

Примечание: Если вы хотите сохранить его в США Ascii, используйте new XDeclaration("1.0", "us-ascii", "yes")

+0

Есть ли какая-нибудь работа для этого для устаревших систем? – Brett

+0

Да - используйте XDeclaration («1.0», «us-ascii», «yes») –

0

Файл сохраняется в кодировке UTF-8 с последовательностью байтов габаритного символа в начале (этот символ начинается с октета 0xEF).

Ваш валидатор по какой-то причине, похоже, не любит этого персонажа. Строго говоря, этот символ является пробелом, и недопустимо, чтобы пробелы предшествовали декларации XML. Тем не менее, большинство парсеров, которых я знаю, пропустит это как просто индикатор кодировки unicode и не будет рассматривать его как контент.

+1

Официальный стандарт W3C позволяет специфицировать спецификацию перед декларацией XML. Любой валидатор, который не может справиться с этим, является нестандартным. –

Смежные вопросы