Хорошо, я редактирую исходное сообщение. Думаю, я немного потрудился, заменив теги имен исходного XML. В любом случае, вот выдержка из оригинального файла:нужна помощь в преобразовании XML в XML с использованием XSL
<EMPLOYEE_LIST>
<EMPLOYEES>
<EMPLOYEE>
<EMPID>650000</EMPID>
<FIRST_NAME>KEITH</FIRST_NAME>
<MIDDLE_NAME>HUTCHINSON</MIDDLE_NAME>
<LAST_NAME>ROGERS</LAST_NAME>
<EMP_TYPE></EMP_TYPE>
<EMP_REF_ID>500000</EMP_REF_ID>
<JOINED_ON>2001-10-06</JOINED_ON>
<COMMENTS>Miscellanous Comments</COMMENTS>
<NATIONALITY>
<VALUE>American</VALUE>
</NATIONALITY>
<EMP_AKA>
<AKA_NAME>Danny</AKA_NAME>
</EMP_AKA>
<EMP_AKA>
<AKA_NAME>Dan</AKANAME>
</EMP_AKA>
<EMP_AKA>
<AKA_NAME>Ray</AKA_NAME>
</EMP_AKA>
<EMP_ADDR>
<STREET> </STREET>
<CITY> </CITY>
<STATE> </STATE>
<ZIP> </ZIP>
<COUNTRY> </COUNTRY>
</EMPLOYEE>
</EMPLOYEES>
</EMPLOYEE_LIST>
Вопрос, который я столкнулся с выше XML является то, что я не могу найти способ, чтобы соответствовать несколько AKA (Also Known As) атрибуты под одной собственности и XSL, что я использую для этого преобразования заключается в следующем:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/EMPLOYEE_LIST">
<employees>
<xsl:apply-templates select="EMPLOYEES/node()"/>
</employees>
</xsl:template>
<xsl:template match="EMPLOYEE">
<employee>
<xsl:apply-templates select="*"/>
</employee>
</xsl:template>
xsl:template match="EMPLOYEE/EMPID">
<emp_id>
<xsl:value-of select="."/>
</emp_id>
</xsl:template>
<xsl:template match="EMPLOYEE/FIRST_NAME">
<f_name>
<xsl:value-of select="."/>
</f_name>
</xsl:template>
<xsl:template match="EMPLOYEE/MIDDLE_NAME">
<m_name>
<xsl:value-of select="."/>
</m_name>
</xsl:template>
<xsl:template match="EMPLOYEE/LAST_NAME">
<l_name>
<xsl:value-of select="."/>
</l_name>
</xsl:template>
.
.
.
.
.
<xsl:template match="EMPLOYEE/EMP_AKA">
<aka_list>
<xsl:for-each select="AKA_NAME">
<aka>
<xsl:for-each select=".">
<xsl:apply-templates/>
</xsl:for-each>
</aka>
</xsl:for-each>
</aka_list>
</xsl:template>
</xsl:stylesheet>
Вышеприведенный XSL применительно к моему XML дает следующий вывод:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<emp_id>111345</emp_id>
<f_name>KEITH</f_name>
<m_name>HUTCHINSON</m_name>
<l_name>ROGERS</l_name>
<aka_list>
<aka>Danny</aka>
</aka_list>
<aka_list>
<aka>Dan</aka>
</aka_list>
<aka_list>
<aka>Ray</aka>
</aka_list>
</employee>
</employees>
который не то, что я т чтобы получить, так как мне нужны данные в следующем формате:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<emp_id>111345</emp_id>
<f_name>KEITH</f_name>
<m_name>HUTCHINSON</m_name>
<l_name>ROGERS</l_name>
<aka_list>
<aka>Danny</aka>
<aka>Dan</aka>
<aka>Ray</aka>
</aka_list>
</employee>
</employees
Есть ли способ достичь этого?
Двигаясь вперед, есть элементы в XML, которые находятся в огромных количествах, например, AKA_NAME.
<aka_list>
<aka>Danny</aka>
</aka_list>
<aka_list>
<aka>Dan</aka>
</aka_list>
<aka_list>
<aka>Ray</aka>
</aka_list>
<aka_list>
<aka>Danny_2</aka>
</aka_list>
<aka_list>
<aka>Dan_2</aka>
</aka_list>
<aka_list>
<aka>Ray_2</aka>
</aka_list>
Преобразование должно нести только вперед верхнюю 5 и шестой следует быть усечены, как:
<aka_list>
<aka>Danny</aka>
<aka>Dan</aka>
<aka>Ray</aka>
<aka>Danny_2</aka>
<aka>Dan_2</aka>
</aka_list>
Выведенный вами результат не соответствует шаблону XSLT (на выходе нет элемента AKA_LIST). –
' JOHN FILTER' открывается с закрытием AKA с ALIAS, ошибка проверки. Будьте уверены, что ваш входной XML. –
Я не понимаю, у вас есть '' в вашем коде, но '' и' 'в вашем выпуске ?? То, что вы хотите? –