Скажем, у меня был некоторый XML, который я хотел преобразовать в HTML. XML разделен на упорядоченные разделы:
<?xml version="1.0" encoding="utf-8"?>
<root>
<section attr="someCriteria">
<h1>Title 1</h1>
<p>paragraph 1-1</p>
<p>paragraph 1-2</p>
</section>
<section attr="someOtherCriteria">
<h3>Subtitle 2</h3>
<ul>
<li>list item 2-1</li>
<li>list item 2-2</li>
<li>list item 2-3</li>
<li>list item 2-4</li>
</ul>
</section>
<section attr="anotherSetOfCriteria">
<warning>
Warning: This product could kill you
</warning>
</section>
<section attr="evenMoreCriteria">
<disclaimer>
You were warned
</disclaimer>
</section>
<section attr="criteriaSupreme">
<p>Copyright 1999-2011</p>
</section>
</root>
У меня есть несколько таких XML-документов. Мне нужно сгруппировать и преобразовать эти разделы на основе критериев. Будет два разных типа ведер.
- Таким образом, первый раздел будет помещен в ведро (например,
<div class="FormatOne"></div>
). - Если второй раздел соответствует критериям для попадания в корзину FormatOne, он также попадет в эту корзину.
- Если для третьего раздела требуется другое ведро (например,
<div class="FormatTwo"></div>
), то создается новое ведро, и содержимое раздела помещается в это ведро. - Если ведро для четвертого раздела требует «FormatOne» (который отличается от предыдущего формата), то снова создается новое ведро, и содержимое раздела помещается в это ведро.
- и т. д. Каждый раздел будет помещаться в то же ведро, что и предыдущий раздел, если они имеют одинаковый формат. Если нет, создается новый сегмент.
Таким образом, для каждого документа, в зависимости от логики разделения сегментов, документ может закончиться следующим образом:
<body>
<div class="FormatOne">
<h1>Title 1</h1>
<p>paragraph 1-1</p>
<p>paragraph 1-2</p>
<h3>Subtitle 2</h3>
<ul>
<li>list item 2-1</li>
<li>list item 2-2</li>
<li>list item 2-3</li>
<li>list item 2-4</li>
</ul>
</div>
<div class="FormatTwo">
<span class="warningText">
Warning: This product could kill you
</span>
</div>
<div class="FormatOne">
<span class="disclaimerText"> You were warned</span>
<p class="copyright">Copyright 1999-2011</p>
</div>
</body>
это:
<body>
<div class="FormatOne">
<h1>Title 1</h1>
<p>paragraph 1-1</p>
<p>paragraph 1-2</p>
<h3>Subtitle 2</h3>
</div>
<div class="FormatTwo">
<ul>
<li>list item 2-1</li>
<li>list item 2-2</li>
<li>list item 2-3</li>
<li>list item 2-4</li>
</ul>
</div>
<div class="FormatOne">
<span class="warningText">
Warning: This product could kill you
</span>
<span class="disclaimerText"> You were warned</span>
<p class="copyright">Copyright 1999-2011</p>
</div>
</body>
или даже это:
<body>
<div class="FormatOne">
<h1>Title 1</h1>
<p>paragraph 1-1</p>
<p>paragraph 1-2</p>
<h3>Subtitle 2</h3>
<ul>
<li>list item 2-1</li>
<li>list item 2-2</li>
<li>list item 2-3</li>
<li>list item 2-4</li>
</ul>
<span class="warningText">
Warning: This product could kill you
</span>
<span class="disclaimerText"> You were warned</span>
<p class="copyright">Copyright 1999-2011</p>
</div>
</body>
в зависимости от того, как определены разделы.
Есть ли способ использовать XSLT для выполнения такого рода магии группировки?
Любая помощь будет здорово. Спасибо!