2015-02-13 2 views
1

У меня есть xml-файл, который может быть динамическим (это означает, что число строк может быть 0, 1, 2 или много в следующем примере xml). Как обрабатывает xsl (или xsl-fo) этот случай? Будем очень благодарны за любые примеры или указатели.xsl или xsl-fo для обработки динамического xml

<form> 
    <table> 
     <row> 
      <date>2012-02-10</date> 
      <departure>Boston</departure> 
      <arrival>NYC</arrival> 
      <typeOfTransport>Flight</typeOfTransport> 
      <estimatedCost>$300.00</estimatedCost> 
     </row> 
     <row> 
      <date>2012-02-12</date> 
      <departure>NYC</departure> 
      <arrival>Boston</arrival> 
      <typeOfTransport>Flight</typeOfTransport> 
      <estimatedCost>$200.00</estimatedCost> 
     </row> 
    </table> 
</form> 
+0

Ваш вопрос слишком широка, о чем вы на самом деле спрашиваете? Могут ли языки xsl и xsl-fo обрабатывать тривиальный xml? - да; Могут ли обычные процессоры xslt и xsl-fo выполнять свою работу? -> да. – tolanj

ответ

1

Это будет использовать XSL для каждого-(для повторного использования с множественными согласующими элементами XML и т.д.):

<xsl:for-each select="form/table/row"> 
    <!-- Content --> 
</xsl:for-each> 

Он использует выражение XPath для указания, какой узел установлен в процесс - в этом кейс row под form и table.

Содержимое задания функции будет выполняться/повторяться для каждого (отсюда название) совпадающего узла.

Если их нет (0 row s), он не будет вызван. Для двух row s он будет вызван дважды.

Многие люди будут ссылаться на него как на «каждый» цикл, но это неправильное определение (нет никакого способа для break из XSL для каждого, потому что это не цикл).

Смотрите w3schools учебник:

http://www.w3schools.com/xsl/el_for-each.asp

см Также этот вопрос, это поможет вам понять масштабы/контекст того, что вы делаете:

What's the difference between XSLT and XSL-FO?

+0

Отлично! Это решило мою проблему. –

+0

@DeChar - Я бы рекомендовал использовать 'xsl: for-each' (преобразование типа pull), если входные данные просты, и вам не понадобится продлить XSLT в будущем. В противном случае гораздо проще расширить таблицу стилей, если вы используете трансформацию типа push, в которой вы используете 'xsl: apply-templates' и переопределяете встроенные шаблоны для обработки преобразования. –

+0

Многие люди считают, что 'for-each' легче читать, чем шаблоны (которые также привносят некоторые менее очевидные/неявные функции). Легко реорганизовать линию, если его требования меняются. – Mikaveli