Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Kseniya
1

Загрузка внешнего XML: ошибка в DTD или нет?

29.11.2009, 12:11. Просмотров 1472. Ответов 11
Метки нет (Все метки)

В общем, ситуация такая:
Есть ASP-файл, который собирает страничку из кусочков с помощью <!-- #include ...-->
Одним из кусочков должна быть колонка новостей, которая берется их внешнего XML-файла. Естественно, есть собственный XSL-шаблон, который этот XML и дожен обрабатывать. ASP-код выглядит след. образом:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
dim stylefile
dim source
dim style
            
styleFile = Server.MapPath("news1.xsl")
 
set source = Server.CreateObject("Microsoft.XMLDOM")
source.async = false
source.setProperty "ServerHTTPRequest", true
source.load ("http://путь к файлу.xml") 'sourcefile
            
set style = Server.CreateObject("Microsoft.XMLDOM")
style.async = false
style.load stylefile
 
Response.Write source.transformNode(style)
%>
Итак, все работает, если
1. отлаживается просто связка XSL + копия XML-файла на локальном диске (в XML-файле ссылка на DTD присутствует, это важно)
или
2. ASP-файл обращается (по http://) к копии XML-файла, у которого закомментирована ссылка на DTD (в оригинале, т.е. файле, лежащем на новостном сервере, эта ссылка присутствует и комментировать ее там, весьма проблематично, т.е. можно конечно, обрабатывать поток и убирать эту строчку,... но вряд ли это хороший выход)

Если же просто обрабатывать XSL-шаблоном исходный внешний файл, то шаблон свое отрабатывает, т.е. создает необходимые элементы оформления, но не ходит по узлам XML-дерева и соответсвенно не отображает данные.

Web-мастер новостного сайта утверждает, что с DTD все в порядке.
Итак вопрос, в чем может быть проблема: в ASP, в DTD, в настройках web-сервера или еще в чем-то?
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2009, 12:11
Ответы с готовыми решениями:

Есть ли какой-нибудь анализатор или компонент для проверки DTD правил к XML документу?
Господа, есть ли какой-нибудь анализатор или компонент для проверки DTD правил к XML документу?

Нужен Add-Ons по XML, XSL, DTD для Visual InterDev-a
Nyzhen Add-Ons po XML, XSL, DTD i t.d. po etim texnologiyam dlya Visual InterDev-a. I PHP bilo bi...

XML-DTD
Создайте DTD (products.dtd) для розничного торговца в соответствии со следующей спецификацией. XML...

Из XML в DTD?
Есть ли какая то программа или как из файла XML сделать DTD? Что то в интернете ничего полезного не...

Связь xml с DTD
Добрый день всем! У меня в ходе написания xml файла возник вопрос: При подключении к xml файлу DTD...

11
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.11.2009, 14:44 2
А xml файл загружается без ошибок? Т.е. после source.load ('http://путь к файлу.xml') свойство source.parseError.errorCode должно быть равно нулю.
0
Kseniya
29.11.2009, 15:08 3
Когда подгружаемый файл содержит объявление DTD, то он не загружается, а если в нем нет этого объявления то все ок.

ps Если это поможет, то экспортируемый файл находится по адресу http://www.proext.com/export/news-money.xml
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.11.2009, 15:13 4
Покажите исходный XML файл вместе с объявлением DTD
0
29.11.2009, 15:13
Kseniya
29.11.2009, 16:47 5
я ж написала адрес: http://www.proext.com/export/news-money.xml
Это тот самый исходный XML файл с объявленным DTD
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.11.2009, 17:27 6
А вот слона то я и не заметил

Я опробовал приведенный код и у меня он работает. Т.е. документ с DTD грузится с сервера proext.com без ошибок и затем также без ошибок проходит xsl трансформацию.

Какой текст сообщения получается у вас при загрузке документа с DTD?
0
Kseniya
30.11.2009, 09:05 7
сорри, вчера не получилось ответить - сетку обрубили :-((
Текста сообщения нет. просто xsl отрабатывает все, что не связано с узлами получаемого документа, т.е. рисует нужные таблички, заголовки, ссылки, а сами новости не отображает :-(((
Причем, если проверяю работу только xml+xsl (xml просто скопирован на диск, но там присутствует ссылка на dtd) и asp вообще тут ни при чем, то все работает.
В чем конфликт? кто там что не понимает? может что-то с namespase??/
Вот код xsl может уж там чего:
[code]
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:fo='http://www.w3.org/1999/XSL/Format'>
<!--
http://www.proext.com/export/news-money.xml
-->
<xsl:template match='/'>
<table width='200' border='0' cellspacing='0' cellpadding='3' align='center'>
<xsl:call-template name='header'/>

<xsl:for-each select='//item'>
<xsl:if test='position() &lt;= 3'>
<xsl:apply-templates select='.'>
<xsl:with-param name='pos' select='position()'/>
</xsl:apply-templates>
</xsl:if>
</xsl:for-each>
<xsl:call-template name='arhiv'/>
</table>
</xsl:template>
<!-- **************-->
<xsl:template match='item'>
<tr>
<td>
<table width='200' border='0' cellspacing='0' cellpadding='3' align='center'>
<tr>
<td width='11'>
<img src='../images/news_xml.gif' width='7' height='9'/>
</td>
<td width='189' height='20'>
<div class='menu-left'>
<xsl:value-of select='./date'/> / <xsl:value-of select='./time'/>
</div>
</td>
</tr>
<tr>
<td width='11'/>
<td width='189'>
<div class='textbold'>
<xsl:value-of select='./title'/>
</div>
</td>
</tr>
<tr>
<td width='11'/>
<td width='189'>
<div class='text'>
<xsl:value-of select='anons'/>
</div>
</td>
</tr>
<tr>
<td width='11'/>
<td width='189'>
<xsl:call-template name='details'>
<xsl:with-param name='path' select='@href'/>
</xsl:call-template>
</td>
</tr>
<tr>
<td height='1' colspan='2' align='center'>
<img src='../images/line_xml.gif' height='1' width='100%'/>
</td>
</tr>
</table>
</td>
</tr>
</xsl:template>
<!-- ********* header ***************** -->
<xsl:template name='header'>
<tr>
<td class='second_menu'>
Новости мира IT
</td>
</tr>
</xsl:template>
<!-- ********* details ***************** -->
<xsl:template name='details'>
<x
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
30.11.2009, 16:06 8
XSL файл ошибок не содержит. Проверил его и в действии из ASP (единственное что я сделал это заменил кодировку UTF-8 на windows-1251) и с помощью XML Spy 4.3.

Вы говорили что если XML файл содержит DTD, то он не загружается. Распечатайе свойство source.parseError.reason чтобы понять что происходит. Именно про этот текст ошибки я и спрашивал. Больше пока идей нет.

По xsl файлу у меня есть несколько предложений.
- Добавьте строку <xsl:output method='html' /> после <xsl:stylesheet ... />
- Уберите объявление пространства имен fo. Оно у вас нигде не используется.
- Обработчики событий onmouseover и onmouseout - лишние. Того же эфекта можно достичь с помощью a.menu-right:hover в CSS.
0
Kseniya
01.12.2009, 09:42 9
Спасибо.
Попробую.
А насчет css Вы совершенно правы, просто переписывать или создавать заново лист стилей, а тот что уже есть это a.hover уже использует и несколько по-другому отображает. Короче, все фигня и проблема не в этом.
Kseniya
01.12.2009, 10:26 10
Попробовала сделать все как Вы сказали. Не помогло :-((

source.parseError.reason дает
System error: -2147012889.
это что такое?
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
01.12.2009, 17:16 11
Что это за ошибка я не знаю
Подозреваю что это связано с ошибками протокола HTTP. То есть сервер временно недоступен или что-то другое в этом роде.
Можно попробовать использовать ServerXMLHTTP с увеличенным значением таймаута.
0
bazile
67 / 43 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
01.12.2009, 17:20 12
Вот пример использования ServerXMLHTTP из документации по MSXML
vb.net
1
2
3
4
5
6
7
8
9
10
Dim xmlServerHttp
Dim lResolve, lConnect, lSend, lReceive
 
lResolve = 5 * 1000
lConnect = 5 * 1000
lSend = 15 * 1000
lReceive = 15 * 1000
xmlServerHttp.setTimeouts lResolve, lConnect, lSend, lReceive
xmlServerHttp.open "GET", "http://localhost/sample.xml", False
xmlServerHttp.send
0
01.12.2009, 17:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2009, 17:20

Валидация XML по собственное DTD
Суть вопроса таков. Загружаем XML-файл на сервер. Дальше надо его провалидировать по уже...

анализ XML на основе DTD .
Помогите пожалуйста. Имею два файла: произвольный файл file.xml и мой myfile.dtd. В программу...

БИПИТ работа с xml c DTD
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.