xslt xpath + проблема с несколькими таблицами стилей - PullRequest
1 голос
/ 13 мая 2011

Я создаю для школы программу с множественным выбором. Для этого мне нужно написать таблицу стилей xslt, чтобы показать правильный ответ.

Мой XML имеет следующую структуру

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QUIZ SYSTEM "quiz.dtd">
<?xml-stylesheet type="text/xsl" href="quizanswers.xsl"?>
<quiz>
<multipleChoice solution="3">
    <question>Question 1</question>
    <answer>answer 1</answer>
    <answer>answer 2</answer>
    <answer>answer 3</answer>
    <answer>answer 4</answer>
</multipleChoice>
<multipleChoice solution="4">
    <question>Question 1</question>
    <answer>answer 1</answer>
    <answer>answer 2</answer>
    <answer>answer 3</answer>
    <answer>answer 4</answer>
</multipleChoice>
</quiz>

со следующим файлом xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h1>Answers</h1>
<xsl:for-each select="quiz/multipleChoice">
<u><br></br><xsl:value-of select="question"/></u><br></br>
- <xsl:value-of select="question[../multipleChoice/@solution]"/> <br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

То, что я хочу, это установить число из атрибута решения в вопросе [атрибут решения]. Что я достиг, но не работает. У кого-нибудь есть решение / предложение по этой проблеме?

Я также хочу, чтобы этот XML-файл имел несколько таблиц стилей ... Возможно ли это?

Заранее спасибо ...

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Попробуйте это:

<xsl:template match="/">
  <html>
    <body>
      <h1>Answers</h1>
      <xsl:apply-templates />
    </body>
  </html>
</xsl:template>

<xsl:template match="question">
  <u>
    <br />
    <xsl:apply-templates />
  </u>
  <br />
</xsl:template>

<xsl:template match="answer" />

<xsl:template match="answer[position() = ../@solution]">
  <xsl:text>- </xsl:text>
  <xsl:apply-templates />
  <br />
</xsl:template>

Последние два шаблона игнорируют все ответы, кроме случаев, когда позиция узла ответа (только среди узлов ответа) равна атрибуту @solution его родителя.

1 голос
/ 13 мая 2011

Да, вы можете использовать несколько таблиц стилей, включив их следующим образом:

<xsl:include href="mutiple.xsl"/>

Похоже, вам нужен ответ, а не вопрос? Таким образом, ваш XSLT должен выглядеть примерно так:

Финальная версия

После полезных комментариев от DevNull я согласен, что это самое чистое решение

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
        <body>
            <h1>Answers</h1>
            <xsl:for-each select="quiz/multipleChoice">
                <u>
                    <br></br>
                    <xsl:value-of select="question"/>
                </u>
                <br></br>
                <br />
                <xsl:value-of select="answer[number(../@solution)]" /><br />
            </xsl:for-each>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...