У меня есть файл XML в качестве входных данных для файла XSL.Когда я указываю выходной метод xsl как xml и определяю элемент, используя xsl: element или сопоставляю элемент из xml, как сказано в других потоках, я не получаю никаких тегов. Я получаю только текст xml. У меня естьпробовал разные примеры.Что бы я ни пытался, я получаю только текстовую часть XML.Можете ли вы привести простой пример, содержащий полный рабочий код преобразования одного xml в другой xml с использованием xsl.
Извините, что не опубликовал пример.
Я попытался реструктурировать xml двумя способами:
1) Наличие файлов xsl и xml в одной папке и открытие xml с помощью браузера. Файл xsl применяется к xml, как показано ниже.
test.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<root>
<info>
<firstname>Bob</firstname>
<lastname>Joe</lastname>
</info>
<notes>
<note>text1</note>
<note>text2</note>
</notes>
<othernotes>
<note>text3</note>
<note>text4</note>
</othernotes>
</root>
sample.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<root>
<xsl:copy-of select="info"/>
<notes>
<xsl:copy-of select="othernotes"/>
</notes>
</root>
</xsl:template>
</xsl:stylesheet>
вывод: Боб Джо text3 text4
Обафайлы находятся в той же папке, и я открыл XML-файл, используя браузер, чтобы увидеть вывод.
2) В моем проекте используется Framework Struts с xslt.XML, установленный для представления, выглядит следующим образом. XML:
<root>
<data>
<array-list>
<array-list xsi:type="java:java.util.ArrayList">
<slot-info-object avail-crit-thresh="-1.0" avail-fif-min="-1.0" avail-five-min="-1.0" avail-one-day="0.0" avail-one-hr="-1.0" avail-warn-thresh="-1.0" freeslot="0" keyn-service-subtype-id="9" perf-crit-thresh="-1.0" perf-fif-min="-1.0" perf-five-min="-1.0" perf-one-day="0.0" perf-one-hr="-1.0" perf-warn-thresh="-1.0" severity-type="0" shared-script-id="-1" slot-id="671457" trans-id="733299" user-id="0" xsi:type="java:com.keynote.mykeynote.service.dashboard.SlotInfoObject">
<slot-alias>Single slot</slot-alias>
</slot-info-object>
<slot-info-object avail-crit-thresh="-1.0" avail-fif-min="1.0" avail-five-min="1.0" avail-one-day="1.0" avail-one-hr="1.0" avail-warn-thresh="-1.0" freeslot="0" keyn-service-subtype-id="9" perf-crit-thresh="-1.0" perf-fif-min="0.5105" perf-five-min="0.529" perf-one-day="0.6195208333333333" perf-one-hr="0.5505" perf-warn-thresh="-1.0" severity-type="0" shared-script-id="595" slot-id="685397" trans-id="-7105" user-id="0">
<slot-alias>SharedSlot</slot-alias>
</slot-info-object>
</array-list>
</array-list>
</data>
</root>
Представление - это xsl-файл, содержащий следующий код: XSL-файл:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/root/data/array-list/array-list">
<root>
<slot-info-object>
<xsl:for-each select="slot-info-object">
<xsl:copy-of select="slot-alias"/>
</xsl:for-each>
</slot-info-object>
</root>
</xsl:template>
</xsl:stylesheet>
вывод: Single slotSharedSlot
Еще один вопрос: request.setAttribute (StrutsCXConstants.XML_KEY, data);Здесь данные - это коллекция Java, такая как ArrayList.Эта строка записана в файле действий Struts. Она преобразуется только в XML для представления.Когда мы говорим это в xsl
<xsl:output method="xml" indent="yes"/>
, если тип ответа в классе Struts Action должен быть установлен на "text / xml"
Спасибо.