2015-01-21 31 views
0

Я сделал несколько преобразований XSL в прошлом, но, похоже, я не в своей глубине на этом. Через пробную версию и ошибку мне удалось получить почти тот результат, который я ищу, но я не могу понять, как получить корневой элемент в моем выпуске.XSL Trouble: Выход отсутствует корневой элемент

Вот пример ввода XML-файла. Мне нужно отсеять лишнюю информацию и попасть внутрь этого CDATA.

<SI_RESOURCES> 
    <SCHEDULES> 
    <SCHEDULE> 
     <SCHEDULE_TYPE>2</SCHEDULE_TYPE> 
     <ASSOCIATED_BP_NAME>AFTPurgeArchiveMailboxes</ASSOCIATED_BP_NAME> 
     <ASSOCIATED_SERVICE_NAME>AFTPurgeArchiveMailboxes</ASSOCIATED_SERVICE_NAME> 
     <SCHEDULE_PARAMS/> 
     <SCHEDULE_ONSTARTUP>1</SCHEDULE_ONSTARTUP> 
     <SCHEDULE_EXECUTION_COUNT>-1</SCHEDULE_EXECUTION_COUNT> 
     <SCHEDULE_EXECUTION_CURRENT_COUNT>0</SCHEDULE_EXECUTION_CURRENT_COUNT> 
     <SCHEDULE_EXECUTION_STATUS>WAIT</SCHEDULE_EXECUTION_STATUS> 
     <SCHEDULE_STATUS>ACTIVE</SCHEDULE_STATUS> 
     <SCHEDULE_SYSTEMNAME>node1</SCHEDULE_SYSTEMNAME> 
     <SCHEDULE_USERID>admin</SCHEDULE_USERID> 
     <SCHEDULE_TIMINGXML><![CDATA[<timingxml><days><day ofWeek="-1"><times><time>0400</time></times></day></days><excludedDates></excludedDates></timingxml>]]></SCHEDULE_TIMINGXML> 
    </SCHEDULE> 
    <SCHEDULE> 
     <SCHEDULE_TYPE>1</SCHEDULE_TYPE> 
     <ASSOCIATED_BP_NAME>Schedule_AssociateBPsToDocs</ASSOCIATED_BP_NAME> 
     <ASSOCIATED_SERVICE_NAME>AssociateBPsToDocs</ASSOCIATED_SERVICE_NAME> 
     <SCHEDULE_PARAMS/> 
     <SCHEDULE_ONSTARTUP>0</SCHEDULE_ONSTARTUP> 
     <SCHEDULE_EXECUTION_COUNT>-1</SCHEDULE_EXECUTION_COUNT> 
     <SCHEDULE_EXECUTION_CURRENT_COUNT>0</SCHEDULE_EXECUTION_CURRENT_COUNT> 
     <SCHEDULE_EXECUTION_STATUS>WAIT</SCHEDULE_EXECUTION_STATUS> 
     <SCHEDULE_STATUS>ACTIVE</SCHEDULE_STATUS> 
     <SCHEDULE_SYSTEMNAME>node1</SCHEDULE_SYSTEMNAME> 
     <SCHEDULE_USERID>admin</SCHEDULE_USERID> 
     <SCHEDULE_TIMINGXML><![CDATA[<timingxml><days><day ofWeek="-1"><times><timeRange><range>0000-2359</range><interval>30</interval><onMinute>0</onMinute></timeRange></times></day></days><excludedDates></excludedDates></timingxml>]]></SCHEDULE_TIMINGXML> 
    </SCHEDULE> 
    </SCHEDULES> 
</SI_RESOURCES> 

Вот мой XSL до сих пор. Это грязно, и я не совсем уверен, как это работает. Я не получаю выход, когда использую <xsl:template match="/">, и я не уверен, почему. Мое единственное предположение, что это имеет какое-то отношение к CDATA.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="node()|@*"> 
    <xsl:for-each select="SCHEDULE"> 
    &lt;schedule&gt; 
     &lt;bp_name&gt;<xsl:value-of select="ASSOCIATED_BP_NAME"/>&lt;/bp_name&gt; 
     &lt;run_on_startup&gt;<xsl:value-of select="SCHEDULE_ONSTARTUP"/>&lt;/run_on_startup&gt; 
     &lt;status&gt;<xsl:value-of select="SCHEDULE_STATUS"/>&lt;/status&gt; 
     &lt;user&gt;<xsl:value-of select="SCHEDULE_USERID"/>&lt;/user&gt; 
     <xsl:value-of select="SCHEDULE_TIMINGXML"/> 
    &lt;/schedule&gt; 
    </xsl:for-each> 
    <xsl:apply-templates/> 
</xsl:template> 

я мог бы использовать полученный вывод, если он имел корневой элемент, т.е. <schedules>, но я не могу понять, как получить его там. Может кто-то указать мне верное направление?

ответ

0

Вам действительно нужен выход, который нужно экранировать? Если да, попробуйте:

<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="/SI_RESOURCES"> 
    <schedules> 
     <xsl:for-each select="SCHEDULES/SCHEDULE"> 
      &lt;schedule&gt; 
       &lt;bp_name&gt;<xsl:value-of select="ASSOCIATED_BP_NAME"/>&lt;/bp_name&gt; 
       &lt;run_on_startup&gt;<xsl:value-of select="SCHEDULE_ONSTARTUP"/>&lt;/run_on_startup&gt; 
       &lt;status&gt;<xsl:value-of select="SCHEDULE_STATUS"/>&lt;/status&gt; 
       &lt;user&gt;<xsl:value-of select="SCHEDULE_USERID"/>&lt;/user&gt; 
       <xsl:value-of select="SCHEDULE_TIMINGXML"/> 
      &lt;/schedule&gt; 
     </xsl:for-each> 
    </schedules> 
</xsl:template> 

</xsl:stylesheet> 
+0

Это сработало! Мне пришлось изменить '' на '< расписания >', чтобы заставить его работать по какой-то причине, но я могу жить с этим. Спасибо за помощь! – Pauliesyllabic

+0

@Pauliesyllabic Пожалуйста, не забудьте [** принять этот ответ **] (http://stackoverflow.com/help/someone-answers), если он решил вашу проблему. Благодаря! –

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