Используйте xml-комментарий для генерации форматированных выходных данных html

#html #xml #xls

#HTML #xml #xls

Вопрос:

Я пытаюсь сгенерировать красиво отформатированный html-документ из комментариев, которые у меня есть в XML-файле. В настоящее время у меня есть XML-файл, который используется для генерации HTML-списка XML-таблиц. Для того, чтобы я мог добавлять комментарии к таблицам, я вручную добавляю комментарии в выходной HTML-файл.

Я хотел бы, если возможно, поместить html-код в XML-файл в качестве комментария и заставить xslt использовать комментарий для создания правильно отформатированного документа.

Вот часть xml-файла, которая прокомментирована. Здесь есть синтаксис новой строки html, который я бы хотел, чтобы xslt читал как html. Я думаю, что должен быть лучший способ использовать raw xml для создания этого, но я не хочу, чтобы комментарии считывались в xml-файле, поэтому не хочу, чтобы это было записью в таблице.

     <table name="ers_benchmark_defn" xmlns="">
    <!-- This table contains mapping between hierarchy nodes and their respective benchmarks.  The columns should be populated as follows:<br>
             <ul>
             <li>HIERARCHY_NODE<br>
             This column contains the name of the hierarchy node in the ERS Risk Hierarchy.</ul>
             <ul>
             <li>BENCHMARK<br>
             The column can be populated with either;<br>
             a Calypso portfolio name,<br>
             an ERS Risk Hierarchy name, or<br>
             an ERS Risk Hierarchy node name.<br><br>
             In the latter case, the column should be populated with the hierarchy node name and the hierarchy to which it belongs, separated by a percentage symbol, %.</ul>
             <ul>
             <li>BENCHMARK_TYPE<br>
             If the value in the benchmark column is an ERS hierarchy or hierarchy node name, this column should be populated with the value HIERARCHY.  Otherwise, when using a Calypso portfolio name, it should not be populated.</ul>
             <ul>
             <li>SCALING_FACTOR<br>
             This column should be populated with the scaling factor by which the benchmark results should be multiplied.  To use MTM scaling, leave this column unpopulated.</ul>
             See the ERS 10.2 Release notes for further information.<br><br> -->
    <column name="hierarchy_node" nullable="false" type="string" scale="255"/>
    <column name="benchmark" nullable="false" type="string" scale="255"/>
    <column name="benchmark_type" nullable="true" type="string" scale="32"/>
    <column name="scaling_factor" nullable="true" type="float"/>
  

Это часть файла xsl, которую я создал для использования комментария, однако он не интерпретирует html.

 <tr class="info" width="100%">
        <td colspan="4"><xsl:value-of select="comment()"/></td>
    </tr>
  

Требуемый вывод при форматировании вручную выглядит следующим образом:

   <p>
     <table border="1" cellpadding="2" cellspacing="0">
        <tr class="title">
           <th colspan="4"><a name="ers_benchmark_defn"></a>ers_benchmark_defn
           </th>
        </tr>
        <tr class="info" width=100%>
             <th colspan=4 align=left>This table contains mapping between hierarchy nodes and their respective benchmarks.  The columns should be populated as follows:<br>
             <ul>
             <li>HIERARCHY_NODE<br>
             This column contains the name of the hierarchy node in the ERS Risk Hierarchy.</ul>
             <ul>
             <li>BENCHMARK<br>
             The column can be populated with either;<br>
             a Calypso portfolio name,<br>
             an ERS Risk Hierarchy name, or<br>
             an ERS Risk Hierarchy node name.<br><br>
             In the latter case, the column should be populated with the hierarchy node name and the hierarchy to which it belongs, separated by a percentage symbol, %.</ul>
             <ul>
             <li>BENCHMARK_TYPE<br>
             If the value in the benchmark column is an ERS hierarchy or hierarchy node name, this column should be populated with the value HIERARCHY.  Otherwise, when using a Calypso portfolio name, it should not be populated.</ul>
             <ul>
             <li>SCALING_FACTOR<br>
             This column should be populated with the scaling factor by which the benchmark results should be multiplied.  To use MTM scaling, leave this column unpopulated.</ul>
             See the ERS 10.2 Release notes for further information.<br><br></th>
        </tr>
        <tr class="header">
           <th>column name</th>
           <th>nullable</th>
           <th>type</th>
  

Это выдержки из полного кода, но я думаю, этого должно быть достаточно, чтобы кто-нибудь мог мне помочь.

Спасибо!

Ответ №1:

О, я полагаю, вы говорите о <!CDATA[...]]> файлах в формате XML, проверьте страницу w3schools об этом.

В вашем примере я создаю comments элемент (использую имя, которое вам больше всего нравится) и ввожу disable-output-escaping атрибут, чтобы избежать искажения HTML.

Это будет выглядеть следующим образом:

 <table name="ers_benchmark_defn" xmlns="">
    <comments>
        <![CDATA[This table contains mapping between hierarchy nodes and their respective benchmarks.  The columns should be populated as follows:<br>
         <ul>
         <li>HIERARCHY_NODE<br>
         This column contains the name of the hierarchy node in the ERS Risk Hierarchy.</ul>
         <ul>
         <li>BENCHMARK<br>
         The column can be populated with either;<br>
         a Calypso portfolio name,<br>
         an ERS Risk Hierarchy name, or<br>
         an ERS Risk Hierarchy node name.<br><br>
         In the latter case, the column should be populated with the hierarchy node name and the hierarchy to which it belongs, separated by a percentage symbol, %.</ul>
         <ul>
         <li>BENCHMARK_TYPE<br>
         If the value in the benchmark column is an ERS hierarchy or hierarchy node name, this column should be populated with the value HIERARCHY.  Otherwise, when using a Calypso portfolio name, it should not be populated.</ul>
         <ul>
         <li>SCALING_FACTOR<br>
         This column should be populated with the scaling factor by which the benchmark results should be multiplied.  To use MTM scaling, leave this column unpopulated.</ul>
         See the ERS 10.2 Release notes for further information.<br><br>]]>
</comments>
<column name="hierarchy_node" nullable="false" type="string" scale="255"/>
<column name="benchmark" nullable="false" type="string" scale="255"/>
<column name="benchmark_type" nullable="true" type="string" scale="32"/>
<column name="scaling_factor" nullable="true" type="float"/>
  

В вашем XSL-файле:

 <tr class="info" width="100%">
    <td colspan="4"><xsl:value-of select="comments" disable-output-escaping="yes" /></td>
</tr>
  

Ps: Если у вас все еще возникают проблемы с выводом, попробуйте вставить эту xsl:output строку XSL после объявления вашей версии XML (подробнее здесь):

 <xsl:output method="html" omit-xml-declaration="no" indent="yes" />
  

Комментарии:

1. Блестяще! Очень хороший ответ! Если кто-нибудь еще читает это, отключите вывод — экранирование — это правильный синтаксис, но это не займет много времени в Google, чтобы понять это!

2. ups, вы правы, я плохо записал это в конце, я меняю это!