#xml #xslt
#xml #xslt
Вопрос:
Я опубликовал много вопросов относительно вставки XML-элементов с использованием XSLT, я новичок в XSLT и учусь, работая над ним. Итак, спасибо всем, кто помог мне пройти.
Теперь у меня возник другой вопрос: итак, я вставляю повторяющийся (неограниченный) XML-элемент, чтобы он имел тот же xpath, но разные значения для элемента, когда я устанавливаю xpath в соответствии с шаблоном шаблона, он переопределяет более ранние элементы, которые были вставлены. Итак, есть ли способ вставить несколько элементов в существующий XML, используя один и тот же xpath? мой ввод — это xpath, куда должны быть вставлены эти элементы, и значения элементов. Например, мой ввод:
xpath: /root/child
element to insert: new_element
with the values: new1, new2 new3
таким образом, результат должен выглядеть следующим образом:
<root>
<child>
<new_element>new1</new_element>
<new_element>new2</new_element>
<new_element>new3</new_element>
</child>
</root>
Спасибо 🙂
Комментарии:
1. Итак, вы пытаетесь создать / обновить XML-файл в соответствии с требованиями, указанными в обычном текстовом файле. Верно?
2. Да, но XML-файл.. итак, я написал программу для анализа входных данных и извлечения из xpath элементов, которые нужно записать, и их значений.. теперь тот же код генерирует xslt-скрипт, но я застрял на том, как добавить несколько вхождений для одного элемента под одним и тем же узлом. потому что все вхождения будут использовать общий xpath, но иметь разные значения.
3. Для ясного понимания было бы полезно, если бы вы опубликовали реальный образец входного файла (того, который содержит спецификации) и шаблоны xslt, в которых вы застряли, если это возможно.
4. Да, empo, я так и сделаю, просто нужно немного времени, чтобы все подтянуть. Но логика такая же, как у меня выше.. На самом деле я не зациклен на инструкции или чем-то подобном, я хочу знать, возможно ли это сделать с помощью XSLT, потому что я не смог найти никаких примеров для вставки нескольких значений для элемента.. также, если это возможно, то как. Итак, я просто поместил корневой элемент в качестве примера ввода и вывода и того, как я могу создать вывод.. Большое вам спасибо, empo, я действительно ценю вашу помощь 🙂
Ответ №1:
Я, вероятно, неправильно пойму ваш вопрос, но трудно достичь ваших намерений, учитывая детали в вашем сообщении. Я не должен догадываться, здесь я знаю … в любом случае, вас интересует что-то подобное …?
Пример преобразования:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="newdata">
<new_element>new1</new_element>
<new_element>new2</new_element>
<new_element>new3</new_element>
</xsl:variable>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/child">
<xsl:copy>
<xsl:copy-of select="$newdata"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Учитывая этот ввод
<root>
<child/>
</root>
ВОЗВРАТ:
<root>
<child>
<new_element>new1</new_element>
<new_element>new2</new_element>
<new_element>new3</new_element>
</child>
</root>
Комментарии:
1. ДА, сэр .. Отличная догадка 🙂 это именно то, что я искал.. Большое вам спасибо, empo.. спас положение!
2. «Программа», над которой вы работаете, вероятно, более сложная, чем такой простой xslt-код. Вот почему вам лучше потратить некоторое время на изучение XSLT, вероятно, вы сэкономите гораздо больше времени и дней ;-). Тем не менее, добро пожаловать!
3. Верно, я потрачу выходные на изучение XSLT .. и теперь я действительно интересуюсь этим! Еще раз спасибо