Подтвердить что ты не робот

Данные на корневом уровне недействительны.

У меня есть следующий XML-документ:

<?xml version="1.0" encoding="UTF-8"?>
<Offices id="0" enabled="false">
  <office />
</Offices>

Когда я пытаюсь получить к нему доступ через С#:

XmlDocument doc = new XmlDocument();
doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

Я получаю эту ошибку:

Данные на корневом уровне недействительны. Строка 1, позиция 1.

Что не так с этой линией?

4b9b3361

Ответ 1

Это:

doc.LoadXml(HttpContext.Current.Server.MapPath("officeList.xml"));

должен быть:

doc.Load(HttpContext.Current.Server.MapPath("officeList.xml"));

LoadXml() предназначен для загрузки строки XML, а не имени файла.

Ответ 2

Для записи:

"Данные на корневом уровне недействительны" означает, что вы попытались разобрать что-то, что не является документом XML. Он даже не похож на документ XML. Обычно это означает только то, что вы нашли: вы разбираете что-то вроде строки "C:\inetpub\wwwroot\mysite\officelist.xml".

Ответ 3

Я обнаружил, что пример, который я использовал, имел спецификацию документа xml в первой строке. Я использовал таблицу стилей, которую я получил в этой записи в блоге, а первая строка была

<?xmlversion="1.0"encoding="utf-8"?>

который вызывал ошибку. Когда я удалил эту строку, чтобы таблица стилей начиналась с строки

<xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

мое преобразование сработало. Кстати, этот пост в блоге был первым хорошим, простым в использовании примером, который я нашел для попытки получить информацию из XML-определения пакета SSIS, но мне пришлось изменить пути в примере для моих пакетов SSIS 2008, так что вы тоже можете. Я также создал версию для извлечения "потока" из ограничений приоритета. Мой последний выглядит следующим образом:

    <xsl:stylesheet version="1.0" xmlns:DTS="www.microsoft.com/SqlServer/Dts" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="utf-8" />
    <xsl:template match="/">
    <xsl:text>From,To~</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:for-each select="//DTS:PrecedenceConstraints/DTS:PrecedenceConstraint">
      <xsl:value-of select="@DTS:From"/>
      <xsl:text>,</xsl:text>
      <xsl:value-of select="@DTS:To"/>
       <xsl:text>~</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

и дал мне CSV с тильдой в качестве разделителя строк. Я заменил это с помощью строки в текстовом редакторе, а затем импортировал в excel, чтобы посмотреть на поток данных в пакете.