Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Составной ключ к множеству

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MADONZY
Отправлено: 30 Июля, 2014 - 04:15:45
Post Id


Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Здравствуйте! Имеется XML:
CODE (html):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="lab61.xsl"?>
  3. <lab6_1>
  4.     <course id ="XML">
  5.         <title>
  6.         XML и  XSLT. Современные технологии  
  7.         обработки данных для Web и Office 2007
  8.         </title>
  9.         <keywords>
  10.             <keyword>XML</keyword>
  11.             <keyword>XML Schema</keyword>
  12.             <keyword>XPath</keyword>
  13.             <keyword>XSLT</keyword>
  14.         </keywords>
  15.         <teachers>
  16.             <teacher>Никитин И.Г.</teacher>
  17.             <teacher>Павлов Ю.Е.</teacher>
  18.         </teachers>
  19.     </course>
  20.     <course id ="AJAX">
  21.         <title>AJAX. Ра зработка web-приложений для Web 2.0</title>
  22.         <keywords>
  23.             <keyword>AJAX</keyword>
  24.             <keyword>XML</keyword>
  25.             <keyword>XML Sc hema</keyword>
  26.             <keyword>JavaScript</keyword>
  27.             <keyword>XSLT</keyword>
  28.         </keywords>
  29.         <teachers>
  30.             <teacher>Никитин И.Г.</teacher>
  31.             <teacher>Чебыкин Р.И.</teacher>
  32.         </teachers>
  33.     </course>
  34.     <course id ="PHP">
  35.         <title>Профессиональное программирование на PHP 5</title>
  36.         <keywords>
  37.             <keyword>PHP</keyword>
  38.             <keyword>XML</keyword>
  39.             <keyword>XSLT</keyword>
  40.         </keywords>
  41.         <teachers>
  42.             <teacher>Никитин И.Г.</teacher>
  43.             <teacher>Борисов И.О.</teacher>
  44.         </teachers>
  45.     </course>
  46. </lab6_1>


и есть XSL:
CODE (html):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3.  
  4.         <xsl:key name="coursesByTeachers" match="/lab6_1/course" use="teachers/teacher"/>
  5.         <xsl:key name="coursesByKeywords" match="/lab6_1/course" use="keywords/keyword"/>
  6.         <xsl:key name="coursesByKeywordsAndTeacher" match="/lab6_1/course" use="concat(teachers/teacher, keywords/keyword)"/>
  7.  
  8.         <xsl:template match="/">
  9.                 <html>
  10.                         <body>
  11.                                 <h1>All courses:</h1>
  12.                                 <ul>
  13.                                         <xsl:apply-templates select="lab6_1/course" />
  14.                                 </ul>
  15.                                 <h2>Чебыкин Р.И. is reading</h2>
  16.                                 <ul>
  17.                                         <xsl:apply-templates select="key('coursesByTeachers', 'Чебыкин Р.И.')"/>
  18.                                 </ul>
  19.  
  20.                                 <h2>XML is in</h2>
  21.                                 <ul>
  22.                                         <xsl:apply-templates select="key('coursesByKeywords', 'XML')"/>
  23.                                 </ul>
  24.  
  25.                                 <h2>Борисов И.О. is reading XML in</h2>
  26.                                 <ul>
  27.                                         <xsl:apply-templates select="key('coursesByKeywordsAndTeacher', 'Борисов И.О.XSLT')"/> <!-- Не видит -->
  28.                                 </ul>
  29.                         </body>
  30.                 </html>
  31.         </xsl:template>
  32.  
  33.         <xsl:template match="course">
  34.                 <li>
  35.                         <xsl:value-of select="@id" />
  36.                 </li>
  37.         </xsl:template>
  38.  
  39. </xsl:stylesheet>

В общем задача такова: Вывести название курса который ведет Борисов и в котором есть тема XSLT. Дело в том что моя конструкция ищет в каждом курсе по ПЕРВОМУ ключевому слову и по ПЕРВОМУ преподователю.
И теперь вопрос: Как заставить его гулять по всем потомкам и соответственно сравнивать каждого препода ко всем курсам?
 
 Top
Tyoma5891
Отправлено: 30 Июля, 2014 - 08:49:20
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Подключаете библиотеки парсеров хмл или хсл и вперед...
 
 Top
MADONZY
Отправлено: 30 Июля, 2014 - 09:30:59
Post Id


Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Не особо решение. Нужно сделать именно с помощью составного ключа.
 
 Top
Tyoma5891
Отправлено: 30 Июля, 2014 - 10:17:09
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




тогда Вам нужно писать парсер самому, а именно результаты содержимое тегов в цикле заносить в асоциативный массив, все делать за одлни проход по строке первый цикл находит блоки:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <course id ="AJAX">
  2.         <title>AJAX. Ра зработка web-приложений для Web 2.0</title>
  3.         <keywords>
  4.             <keyword>AJAX</keyword>
  5.             <keyword>XML</keyword>
  6.             <keyword>XML Sc hema</keyword>
  7.             <keyword>JavaScript</keyword>
  8.             <keyword>XSLT</keyword>
  9.         </keywords>
  10.         <teachers>
  11.             <teacher>Никитин И.Г.</teacher>
  12.             <teacher>Чебыкин Р.И.</teacher>
  13.         </teachers>
  14.     </course>

второй парсит сосбно сам блок...
 
 Top
MADONZY
Отправлено: 30 Июля, 2014 - 10:19:34
Post Id


Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




Можно пример?
 
 Top
Tyoma5891
Отправлено: 30 Июля, 2014 - 12:36:28
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




MADONZY пишет:
Можно пример?

На самом деле задача не очень простая для начала нужно написать функцию парсинга тегов типа find_tag($str, $tag) на вход которой подается строка и сосбно сам тег который нужно искать, на выходе должно быть содержимое между тегами, также нужно будет создать массив с тегами существующими и функцию проверки на наличие закрывающего тега для строки. Попробуйте реализовать сами...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« XML и его обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB