2016-04-21 2 views
2

У меня есть XML-файл, содержащий эти данные:HTML вывода таблицы

<?xml version="1.0" encoding="iso-8859-1" ?> 
    <university> 
    <lecture> 
     <class>English</class> 
     <hours>3</hours> 
     <pupils>30</pupils> 
    </lecture> 
    <lecture> 
     <class>Math</class> 
     <hours>4</hours> 
     <pupils>27</pupils 
    </lecture> 
    <lecture> 
     <class>Science</class> 
     <hours>2</hours> 
     <pupils>25</pupils> 
    </lecture> 
    </university> 

Возможно ли это, если я могу получить код XQuery, который производит этот выход (ниже) для меня?

<table> 
<tr> 
    <td>English class runs for 3 with 30 pupils</td> 
    <td>Math class runs for 4 with 26 pupils</td> 
    <td>Science class runs for 2 with 25 pupils</td> 
</tr> 
</table> 

EDIT: Ниже моя попытка:

let $classroom := doc("uni.xml")/university/lecture/class 
let $hr := doc("uni.xml")/university/lecture/hours 
let $pupl := doc("uni.xml")/university/lecture/pupils 

<tr> 
<table> 

for $a in $classroom, 
$b in $hr, 
$c in $pupl 

return <td>{$a} class runs for {$b} with {$c} pupils</td> 

</tr> 
</table> 

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

+0

Как указано, ваш XML-ввод не является корректным. XML требует одного корневого элемента. Кроме того, вы что-то пробовали? Пожалуйста, поделитесь – har07

+0

@ har07: Я попытался (см. Мое редактирование), но это не сработает. – mrteeth

ответ

1

В ответ на обновленный XML, и немного вашей попытки стиля XQuery, который с помощью переменных, я хотел бы предложить что-то вроде этого:

<table> 
<tr> 
{ 
    for $lecture in doc("uni.xml")/university/lecture 
    let $class := $lecture/class/string() 
    let $hours := $lecture/hours/string() 
    let $pupils := $lecture/pupils/string() 
    return 
     <td>{$class} class runs for {$hours} with {$pupils} pupils</td> 
} 
</tr> 
</table> 

Демо: http://www.xpathtester.com/xquery/33e31b342098712e331285bda3010e0c

В принципе, цикл запроса через общие родительские элементы, содержащие всю необходимую информацию; элементы lecture. Затем используйте простой относительный XPath/XQuery для извлечения данных из каждого lecture для получения требуемого результата.

+0

Спасибо. Я обновил свой пост выше с исправлениями в xml и моем запрошенном коде. Дайте мне знать, что вы думаете о коде. – mrteeth

+0

@mrteeth Обновил мой ответ соответственно. Я честно оцениваю вашу попытку, но я думаю, что это не в правильном направлении (я имею в виду конструкцию 'for'), поэтому выше предлагалось несколько иной подход к выполнению задачи. – har07

+0

Прохладный, спасибо за исправление. Это работает хорошо. Мне было интересно, почему вы положили let внутри цикла for? Предполагается ли это более эффективно? – mrteeth

Смежные вопросы