Member 13089825 Ответов: 2

Не удалось загрузить файл


Я создал xml файл и мне нужно загрузить файл some stylesheetfile но он выдает ошибку при загрузке файла таблицы стилей

Что я уже пробовал:

MSXML::IXMLDOMDocumentPtr loadXML;
m_hr = loadXML.CreateInstance(__uuidof(DOMDocument));
if (loadXML->load(variant_t(_T("Style.xsl"))) == VARIANT_FALSE)
{
    return false;    // returning false some times
}

xsl файл содержит
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

2 Ответов

Рейтинг:
7

User 7429338

Проверьте информацию об ошибке, предоставленную при load() неудачи:

if (loadXML->load(variant_t(_T("Style.xsl"))) == VARIANT_FALSE)
{
		IXMLDOMParseErrorPtr errPtr = loadXML->GetparseError();  
		_bstr_t bstrErr(errPtr->reason);  

		printf("Error:\n");  
		printf("Code = 0x%x\n", errPtr->errorCode);  
		printf("Source = Line : %ld; Char : %ld\n", errPtr->line, errPtr->linepos);  
		printf("Error Description = %s\n", (char*)bstrErr); 

		return false;    // returning false some times
}


Member 13089825

номер строки исходного кода показывает пустоту

[no name]

Показывает ли он код ошибки? Значение кодов ошибок можно найти по адресу https://msdn.microsoft.com/en-us/library/jj134414(v=против 85).aspx

Member 13089825

НЕТ

Рейтинг:
13

Jochen Arndt

Использование имени файла без пути может привести к сбою, если текущий рабочий каталог не совпадает с тем, что было при создании файла.

Чтобы узнать, что пошло не так, используйте IXMLDOMDocument::load[^] функция, которая принимает два параметра и возвращает HRESULT который может быть использован для получения сообщения об ошибке.


Member 13089825

файл находится в том же каталоге

Jochen Arndt

Не файл должен находиться в "том же" каталоге (что бы это ни значило), а рабочий каталог должно быть то же самое. Поскольку это обычно невозможно контролировать, файлы всегда должны быть указаны с полным путем.

Однако что такое HRESULT при сбое загрузки?
Только это поможет вам выяснить, почему он терпит неудачу.

Member 13089825

HRESULT hr= loadXML->load(variant_t(Style.xsl")));
if (FAILED(hr))
{//как распечатать сведения об ошибке здесь

возвращать false;
}
не могли бы вы проверить это один раз

Jochen Arndt

Вы должны использовать версию из ссылки в моем ответе, используя второй параметр "VARIANT_BOOL* varIsSuccessful" или код из решения Таддеуса.

Если у вас есть код HRESULT, я могу дать вам определение ошибки и сообщение (по крайней мере, завтра, когда вернусь на работу, где у меня есть инструмент для этого).