【问题标题】:XSL Trouble: Output is missing root elementXSL 故障:输出缺少根元素
【发布时间】:2015-01-21 17:31:10
【问题描述】:

我过去做过一些 XSL 转换,但我似乎在这方面不够深入。通过反复试验,我设法获得了几乎我正在寻找的输出,但我无法弄清楚如何在我的输出中获取根元素。

这里是 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。它很乱,我不完全确定它是如何工作的。当我使用&lt;xsl:template match="/"&gt; 时没有输出,我不知道为什么。我唯一的猜测是它与 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>

如果它有一个根元素,我可以使用结果输出,即&lt;schedules&gt;,但我不知道如何在那里得到它。谁能指出我正确的方向?

【问题讨论】:

    标签: xml xslt root


    【解决方案1】:

    你真的需要像那样转义输出吗?如果是,请尝试:

    <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>
    

    【讨论】:

    • 成功了!出于某种原因,我确实必须将&amp;lt;schedules&amp;gt; 更改为&amp;lt;schedules&amp;gt; 才能使其正常工作,但我可以忍受。感谢您的帮助!
    • @Pauliesyllabic 如果它解决了您的问题,请不要忘记accept this answer。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2016-05-10
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    相关资源
    最近更新 更多