Как работать со встроенным файлом XML и XSL - PullRequest
6 голосов
/ 29 июля 2009

Я пытаюсь создать встроенный файл, содержащий как XML, так и XSL. Тест основан на «XML и XSL в одном файле» на dpawson.co.uk. Источник выглядит так:

<?xml-stylesheet type="text/xml" href="#stylesheet"?>
<!DOCTYPE doc [
<!ATTLIST xsl:stylesheet
  id    ID  #REQUIRED>
]>
<doc>
<xsl:stylesheet id="stylesheet"
                version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- any xsl:import elements -->
  <xsl:template match="xsl:stylesheet" />
  <!-- rest of your stylesheet -->
</xsl:stylesheet>

<!-- rest of your XML document -->
</doc>

Первоначально я создал рабочий файл XML и XSL. XML выглядит так:

<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<Report>
    <ReportFor>Test Data</ReportFor>
    <CreationTime>2009-07-29 05:37:14</CreationTime>
</Report>

И файл data.xsl выглядит так:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <!-- ... -->
    <xsl:value-of select="Report/ReportFor" />
    <!-- ... -->
    <xsl:value-of select="Report/CreationTime"/>
    <!-- ... -->
  </xsl:template>
</xsl:stylesheet>

Исходя из этого, я пытаюсь создать встроенный файл XML, содержащий как XML, так и XSL.

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

<?xml-stylesheet type="text/xsl" href="#stylesheet"?>
<!DOCTYPE doc [
<!ATTLIST xsl:stylesheet
  id    ID  #REQUIRED>
]>
<doc>
<xsl:stylesheet id="stylesheet"
                version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- any xsl:import elements -->
  <xsl:template match="xsl:stylesheet" />
  <!-- rest of your stylesheet -->
  <xsl:template match="/">
    <!-- ... -->
    <xsl:value-of select="Report/ReportFor" />
    <!-- ... -->
    <xsl:value-of select="Report/CreationTime"/>
    <!-- ... -->
  </xsl:template>
</xsl:stylesheet>

<!-- rest of your XML document -->
<Report>
    <ReportFor>Test Data</ReportFor>
    <CreationTime>2009-07-29 05:37:14</CreationTime>
</Report>

</doc>

Проблема с этим документом заключается в том, что <xsl:value-of> не получает данные, представленные в разделе XML. Как <xsl:value-of> может распознать внедренные данные? Нужен ли какой-то особый синтаксис?

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

В вашем атрибуте соответствия шаблона отсутствует элемент doc. Попробуйте вместо этого:

<xsl:template match="/doc">
   <xsl:value-of select="Report/ReportFor" />
</xsl:template>
0 голосов
/ 29 июля 2009

Нужно ли для этого использовать "." оператор для получения значения?

 <xsl:value-of select="Report/ReportFor/."/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...