вывод из внешнего файла XML - PullRequest
0 голосов
/ 13 января 2012

Я создал xsl-файл, который будет выводить два XML: s.

Один из XML должен быть пожинен только один раз. так как это только одна структура и она работает, поэтому я не буду публиковать этот код, но в другой я хочу вывести всю древовидную структуру. Но его печатает только первый. а не все дерево.

Это то, к чему я сейчас придумаю

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0"  
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 

<html> 
<body>


<xsl:for-each select="$doc1//quiz//question">   
<xsl:value-of select="$doc1//author" />
<br />
<xsl:value-of select="$doc1//questionText" />
<br />
<xsl:text>Ger </xsl:text><xsl:value-of select="$doc1//points" /><xsl:text> Poäng </xsl:text>
</xsl:for-each>

</body> 
</html> 
</xsl:template> 
</xsl:stylesheet>

спасибо

Edit: Будет ли объявление мой файл XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="q2.xsl"?>
<quiz>
<question>
<author>Författare 1</author>
<questionText>Fråga 1</questionText>
<correct>Svar 1</correct>
<incorrect>fel 1</incorrect>
<incorrect>fel 1-2</incorrect>
<points>1</points>
</question>

<question>
<author>Författare 2</author>
<questionText>Fråga 2</questionText>
<correct>Svar 2</correct>
<incorrect>fel 2</incorrect>
<incorrect>fel 2-3</incorrect>
<points>2</points>
</question>

<question>
<author>Författare 3</author>
<questionText>Fråga 3</questionText>
<correct>Svar 3</correct>
<incorrect>fel 3</incorrect>
<incorrect>fel 3-4</incorrect>
<points>3</points>
</question>

<question>
<author>Författare 4</author>
<questionText>Fråga 4</questionText>
<correct>Svar 4</correct>
<incorrect>fel 4</incorrect>
<incorrect>fel 4-5</incorrect>
<points>4</points>
</question>

<question>
<author>Författare 5</author>+
<questionText>Fråga 5</questionText>
<correct>Svar 5</correct>
<incorrect>fel 5</incorrect>
<incorrect>fel 5-6</incorrect>
<points>5</points>
</question>

</quiz>

1 Ответ

2 голосов
/ 13 января 2012

Ваша проблема в том, что вы возвращаетесь к исходному $doc вместо фактического узла контекста при вводе оператора for-each

Это должно работать

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0"  
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 

<html> 
<body>


<xsl:for-each select="$doc1/quiz/question">   
<xsl:value-of select="author" />
<br />
<xsl:value-of select="questionText" />
<br />
<xsl:text>Ger </xsl:text><xsl:value-of select="points" /><xsl:text> Poäng </xsl:text>
</xsl:for-each>

</body> 
</html> 
</xsl:template> 
</xsl:stylesheet>

Дополнительный пример использования шаблонов применения!

Это намного лучше для чтения ЭСТ. как только все усложняется, и вы можете легко заметить контекст набора узлов!

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">    
        <html>
            <body>
                <xsl:apply-templates select="$doc1/quiz/question"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="question">
        <xsl:value-of select="author" />
        <br />
        <xsl:value-of select="questionText" />
        <br />
        <xsl:text>Ger </xsl:text>
        <xsl:value-of select="points" />
        <xsl:text> Poäng </xsl:text>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...