Информационный портал
pocket versionPOCKET  wikiWIKI  FAQFAQ  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  ПрофильПрофиль  Войти и проверить личные сообщенияВойти и проверить личные сообщения  ВходВход

Вопрос ламера

 
Найти сообщения без ответов
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> FB - разработка и программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение


Michael
Новенький участник форума

Новенький участник форума

Зарегистрирован: 28.05.2008
Сообщения: 4
Откуда: Canada

СообщениеДобавлено: Ср Май 28, 2008 15:56    Заголовок сообщения: Вопрос ламера Ответить с цитатой

Привет всем,

Я экспериментирую с програмным чтением формата fb2. Использую Visual Studio 2005 и XSL.
Изначально тестовый документ (http://www.fictionbook.org/index.php/%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D0%BE%D0%B7%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82_FictionBook_2.1) отказывался читаться, но когда я убрал строку xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" из элемента FictionBook,то все заработало. Вопрос, почему и как с этой проблемой обходиться?


Спасибо,

Миша
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Ср Май 28, 2008 17:14    Заголовок сообщения: Ответить с цитатой

Это вам поддержка Visual Studio 2005 должна объяснить. Само по себе объявление умалчиваемого нэймспейса на читабельности документа сказываться не должно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Gremlin2
Новенький участник форума

Новенький участник форума

Зарегистрирован: 06.04.2008
Сообщения: 70

СообщениеДобавлено: Ср Май 28, 2008 21:44    Заголовок сообщения: Ответить с цитатой

Michael писал(а):
Я экспериментирую с програмным чтением формата fb2. Использую Visual Studio 2005 и XSL.

А какое отношение имеет XSL к чтению формата fb2? И что значит "отказывался читаться" Shocked, если не работает XPath, то достаточно использовать XmlNamespaceManager, например:

Код:
XmlDocument document = new XmlDocument();
document.Load(filename);

XmlNamespaceManager nsManager = new XmlNamespaceManager(document.NameTable);
nsManager.AddNamespace("fb", "http://www.gribuser.ru/xml/fictionbook/2.0");
nsManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink");

XmlNodeList xmlNodes = document.SelectNodes("/fb:FictionBook/fb:body", nsManager);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Michael
Новенький участник форума

Новенький участник форума

Зарегистрирован: 28.05.2008
Сообщения: 4
Откуда: Canada

СообщениеДобавлено: Чт Май 29, 2008 6:03    Заголовок сообщения: Ответить с цитатой

Gremlin2 - спасибо, я попробую.

Я пытался сделать всё в самом базовом варианте, не через объекты .NET а через XSLT и дебагирование XSLT.

Цитата:
<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<!--
This is an XSLT template file. Fill in this area with the
XSL elements which will transform your XML to XHTML.

-->
<xsl:value-of select ="/FictionBook/description/title-info/author/first-name"/>
</body>
</html>
</xsl:template>

</xsl:stylesheet>


Вот в таком варианте я не могу получить искомый first-name.
Если сделать <xsl:value-of select ="/"/> то выбирается весь документ.
А если убрать аттрибут xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" , то первый вариант начинает работать и выдаёт first-name...


[/quote]

Добавлено спустя 55 минут 10 секунд:

Gremlin2 - попробовал:

Цитата:


Dim strB As StringBuilder = New StringBuilder
Dim xmlDoc As XmlDocument = New XmlDocument
xmlDoc.Load(pXML)
'Dim root As XmlNode = xmlDoc.FirstChild.NextSibling
'Dim oManager As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
strB.Append("Автор:")
' oManager.AddNamespace("fb", "http://www.gribuser.ru/xml/fictionbook/2.0")
' oManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink")
Dim xNode As XmlNode = xmlDoc.SelectSingleNode("/FictionBook/description/title-info/author/first-name")
strB.Append(xNode.InnerXml)
strB.Append(" ")
xNode = xmlDoc.SelectSingleNode("/FictionBook/description/title-info/author/last-name")
strB.Append(xNode.InnerXml)
Return strB.ToString
End Function



Та же самая петрушка - единственный вариант который выдаёт "Автор:Дмитрий Грибов" когда убираю из xml документа xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Gremlin2
Новенький участник форума

Новенький участник форума

Зарегистрирован: 06.04.2008
Сообщения: 70

СообщениеДобавлено: Чт Май 29, 2008 9:09    Заголовок сообщения: Ответить с цитатой

Michael писал(а):
Вот в таком варианте я не могу получить искомый first-name.
Если сделать <xsl:value-of select ="/"/> то выбирается весь документ.
А если убрать аттрибут xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" , то первый вариант начинает работать и выдаёт first-name...

А если так:
Код:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fb="http://www.gribuser.ru/xml/fictionbook/2.0" exclude-result-prefixes="fb xlink">
   <xsl:output method="xml" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
   <xsl:template match="/*">
      <html>
         <head>
            <title>
               <xsl:value-of select="fb:description/fb:title-info/fb:book-title"/>
            </title>
         </head>
      </html>
   </xsl:template>

</xsl:stylesheet>


Или так:
Код:
Dim strB As StringBuilder = New StringBuilder
Dim xmlDoc As XmlDocument = New XmlDocument
xmlDoc.Load(pXML)
Dim oManager As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
strB.Append("Автор:")
oManager.AddNamespace("fb", "http://www.gribuser.ru/xml/fictionbook/2.0")
oManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink")
Dim xNode As XmlNode = xmlDoc.SelectSingleNode("/fb:FictionBook/fb:description/fb:title-info/fb:author/fb:first-name", oManager)
strB.Append(xNode.InnerXml)
strB.Append(" ")
xNode = xmlDoc.SelectSingleNode("/fb:FictionBook/fb:description/fb:title-info/fb:author/fb:last-name", oManager)
strB.Append(xNode.InnerXml)
Return strB.ToString


Т.е указываем namespaces документа с префиксами, и далее в xpath выражениях используем эти префиксы. Cool
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Michael
Новенький участник форума

Новенький участник форума

Зарегистрирован: 28.05.2008
Сообщения: 4
Откуда: Canada

СообщениеДобавлено: Ср Июн 04, 2008 8:20    Заголовок сообщения: Ответить с цитатой

Первый вариант с грехом пополам работает - в XSL
Вот тут нашёл примеры http://www.gribuser.ru/xml/fictionbook/2.0/xsl/export/
А второй увы нет пока что. Если есть идеи то буду очень им рад, а пока что буду пробовать.

Добавлено спустя 28 минут 33 секунды:

Ну вот, кое что получилось Smile
Код:
        Dim strB As StringBuilder = New StringBuilder
        Dim xmlDoc As XmlDocument = New XmlDocument
        xmlDoc.Load(pFileName)
        Dim oManager As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
        strB.Append("Автор:")
        oManager.AddNamespace("fb", "http://www.gribuser.ru/xml/fictionbook/2.0")
        oManager.AddNamespace("xlink", "http://www.w3.org/1999/xlink")
        Dim xRoot As XmlNode = xmlDoc.SelectSingleNode("/")
        Dim xFB As XmlNode = xRoot.FirstChild.NextSibling
        Dim xNode As XmlNode = xFB.SelectSingleNode("fb:description/fb:title-info/fb:author/fb:first-name", oManager)
        strB.Append(xNode.InnerXml)
        strB.Append(" ")
        xNode = xFB.SelectSingleNode("fb:description/fb:title-info/fb:author/fb:last-name", oManager)
        strB.Append(xNode.InnerXml)
        Return strB.ToString
    End Function


Вот так заработало. Правда остаётся для полного счастья найти путь без сиблингов - но это уже дело техники и изучения xPath-а.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> FB - разработка и программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group