2010-01-04 3 views
-2

Я не в своей глубине относительно преобразований xsl для генерации образца XML-файла. В основном процесс заключается в том, что я пытаюсь создать большой и сложный файл шаблона XML из созданного приложения XSD.XSLT для создания шаблона XML

Я использовал XMLSpy для создания образца XML-файла из XSD. Следующим шагом является преобразование значений в требуемые значения.

пример того, что я пытаюсь конвертировать ...

<TEST> 
    <VALUE1>String</VALUE1> 
    <VALUE1>aaaa</VALUE1> 
    <VALUE1>aaaaaaaaaaaaa</VALUE1> 
</TEST> 
<TEST> 
    <VALUE1>String</VALUE1> 
    <VALUE1>aaaa</VALUE1> 
    <VALUE1>aaaaaaaaaaaaa</VALUE1> 
</TEST> 

в

<TEST> 
    <VALUE1>TEST_1.VALUE1_1.text</VALUE1> 
    <VALUE1>TEST_1.VALUE1_2.text</VALUE1> 
    <VALUE1>TEST_1.VALUE1_3.text</VALUE1> 
</TEST> 
<TEST> 
    <VALUE1>TEST_2.VALUE1_1.text</VALUE1> 
    <VALUE1>TEST_2.VALUE1_2.text</VALUE1> 
    <VALUE1>TEST_2.VALUE1_3.text</VALUE1> 
</TEST> 

Любая помощь очень ценится, как я новичок в преобразований XML.

Благодарим вас за отзыв и извините, что я не был настолько ясен, насколько это возможно с просьбой.

В заключение я рассматриваю наличие своего рода счетчика для элементов и замену значения в XML с добавленным значением и счетчиком.

Если это первый раз, когда TEST обнаружен и первый VALUE1 найден, замените значение TAG на TEST_1.VALUE1_1.text, а затем повторяйте всюду по древовидной структуре. Так что, если у меня есть: -

<TEST><VALUE1><SUBVAL1>aaaaa</TEST></VALUE1></SUBVAL1> тогда я смотрел бы на замену Аааааа с TEST_1.VALUE1_1.SUBVAL1_1.text (игнорируя Ааааа, потому что я не забочусь)

Я предполагаю, что будет задать два вопроса: -

  1. Возможно ли это?
  2. Если так будет XSLT быть лучший инструмент здесь (в случае необходимости я мог бы обернуть его с Java и использовать DOM/SAX для разбора и замены - просто подумал, что было бы излишним)
+0

Укажите конкретный вопрос. «Научите меня, как использовать XSLT» - это не конкретный вопрос. Возможно, это будет «Что такое хорошие книги по XSLT?» или «Какие хорошие онлайн-учебники по XSLT?» Это не будет «Пожалуйста, напишите мне таблицу стилей», хотя кто-то может это сделать для вас. – bmargulies

+0

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

ответ

1

С образец кода у вас есть при условии, что не существует какой-либо взаимосвязи между значениями данных в ваших источниках и файлах dest.

Возможно, вы могли бы предоставить некоторые реальные (или лучшие поддельные) данные, чтобы мы могли видеть, что такое фактическое преобразование данных. (то, что вы показываете выше, является простой заменой, я предполагаю, что это не то, что вы действительно хотите)

2
  1. Да, это так.
  2. Это хороший инструмент для работы.

Вам понадобится контейнер для ваших элементов TEST, чтобы у вас был один корневой элемент. Затем следует выполнить следующее.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="text()"> 
    <xsl:apply-templates select=".." mode="text" /> 
    <xsl:text>text</xsl:text> 
    </xsl:template> 
    <xsl:template match="*" mode="text"> 
    <xsl:apply-templates select=".." mode="text" /> 
    <xsl:value-of select="local-name()"/> 
    <xsl:text>_</xsl:text> 
    <xsl:value-of select="count(preceding-sibling::*) + 1"/> 
    <xsl:text>.</xsl:text> 
    </xsl:template> 
    <xsl:template match="/*" mode="text" /> 
</xsl:stylesheet> 
+0

большой, спасибо. – Jim

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