2013-09-26 3 views
6

У меня есть 2 XML-файлы, которые мне нужно слить вместе с помощью таблицы стилейОбъединение двух XML-файлов с помощью XSLT

<AssessmentInput> 
    <ApplicationData>...</AppicationData> 
    <MetricList>...</MetricList> 
</AssessmentInput> 

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

<?xml version="1.0" encoding="ascii"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="xsl exslt"> 
    <xsl:output omit-xml-declaration="yes" method="xml" encoding="UTF-8"/> 
    <xsl:param name="ApplicationData" select="/"/> 
    <xsl:param name="MetricList"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="$ApplicationData/ApplicationData"/> 
    </xsl:template> 
    <xsl:template match="ApplicationData"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:apply-templates select="*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Пожалуйста, помогите мне. У меня нет опыта работы с XSLT.

+0

Вы описали структуру своего вывода, но какова структура ваших входных XML-файлов? – zaerymoghaddam

ответ

8

Учитывая следующие входные файлы:

ApplicationData.xml

<?xml version="1.0" ?> 
<ApplicationData> 
    Whatever data you have in here. 
</ApplicationData> 

MetricList.xml

<?xml version="1.0" ?> 
<MetricList> 
    Whatever list you have in here. 
</MetricList> 

AssessmentInput.xml

<?xml version="1.0" ?> 
<AssessmentInput /> 

следующее преобразование merge.xsl применяется к AssessmentInput.xml

<?xml version="1.0" ?> 
<xsl:transform 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:template match="/AssessmentInput"> 
     <xsl:copy> 
      <xsl:copy-of select="document('ApplicationData.xml')" /> 
      <xsl:copy-of select="document('MetricList.xml')" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

производит правильный вывод от

<?xml version="1.0" encoding="UTF-8"?> 
<AssessmentInput> 
    <ApplicationData> 
     Whatever data you have in here. 
    </ApplicationData> 
    <MetricList> 
     Whatever list you have in here. 
    </MetricList> 
</AssessmentInput> 
0

Вы должны заменить строку, как показано ниже: -

<xsl:param name="ApplicationData" select="/"/> 
    <xsl:param name="MetricList"/> 

with this below line one: 
    <xsl:variable name="Application_Data" select="document('Application_Data.xml')/ApplicationData"/> 
<xsl:variable name="'Metric_List" select="document('Application_Data.xml')/MetricList"/> 

я думаю, что это может помочь вам ..

0

Может Application_Data.xml в линии

select="document('Application_Data.xml')/ApplicationData"/> 

быть URL? Как

select="document('../appfiles/Application_Data.xml')/ApplicationData"/> 
+0

Функция document() обрабатывается движком XSL. Поэтому интерпретация строки - вопрос о том, как движок обрабатывает ее. –

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