2016-11-09 2 views
0

Я преобразовываю квалифицированное Дублинское ядро ​​в MODS. Мне нужно объединить два элемента в один, а другие сообщения, которые я нашел здесь, неприменимы, поскольку они соответствуют родительскому элементу.XSLT: объединить несколько несвязанных элементов в один элемент

Dublin Core проблематично с XSLT, потому что у него нет родительских и дочерних элементов ... поэтому я не уверен, что выбрать.

Вот некоторые входные выборки (важные биты являются постоянного тока: элементы покрытия):

<?xml version="1.0"?> 
    <oai_dc:dc (schema etc.)> 
     <dc:title>This is the title</dc:title> 
     <dc:creator>Author McAuthorson</dc:creator> 
     <dc:type>Article</dc:type> 
     <dc:coverage.spatial.lat>49.101</dc:coverage.spatial.lat> 
     <dc:coverage.spatial.long>-122.720</dc:coverage.spatial.long> 
    </oai_dc:dc> 

А вот выход мне нужно для постоянного тока: Элементы покрытия:

<subject> 
    <cartographics> 
    <coordinates>49.101, -122.720</coordinates> 
    </cartographics> 
</subject> 

Я читать решения, которые могут обрабатывать разные элементы с тем же именем, но ничего, что может объединить два элемента с разными именами. Я экспериментировал с настройкой их как переменных, но не могу решить, как передать переменную из одного шаблона (например, сопоставление dc: coverage.spatial.lat) в следующий (соответствующий dc: coverage.spatial.long). Поэтому я как бы летаю слепой.

Любые советы (или ссылки на подходящие ответы, которые я не мог найти) были бы высоко оценены.

+0

Может ли быть несколько лат/длинные пары под одним родителем ('oai_dc: dc' в вашем примере)? –

+0

Нет - на запись есть только один набор пар лат/длинный. – Brandon

+0

Я бы поставил под сомнение вашу стратегию обучения себя XSLT. Вы не можете изучать язык программирования, просматривая в Интернете примеры, которые делают именно то, что вы хотите. Вам нужно изучить принципы и овладеть строительными блоками, чтобы вы могли объединить их для создания собственных решений для ваших конкретных проблем. Если вы не можете решить, как передавать переменные из одного шаблона в другой, то вы не получаете информацию из нужного места. Получите себе хорошую книгу XSLT и прочитайте ее. –

ответ

0

Почему ты не можешь просто:

<xsl:template match="/oai_dc:dc"> 
    <subject> 
     <cartographics> 
      <coordinates> 
       <xsl:value-of select="dc:coverage.spatial.lat" /> 
       <xsl:text>, </xsl:text> 
       <xsl:value-of select="dc:coverage.spatial.long" /> 
      </coordinates> 
     </cartographics> 
    </subject> 
</xsl:template> 
+0

michael.hor257k: Да, это попытка ... Не работает, потому что это всего лишь небольшая часть гораздо большего XSLT (с большим количеством элементов, чем в моем примере). Это решение производит вывод, который игнорирует все остальные элементы/преобразования. – Brandon

+0

@Brandon Вам нужно добавить код для обработки других узлов, которые вы хотите включить в свой вывод. К сожалению, я не могу понять, что это может быть и как их нужно обрабатывать. Проверьте: [mcve]. –