Как получить значения динамически в XSL из XML? - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть xml-файл и xsl-файл, ссылающийся на него, который работает нормально. Я пытаюсь найти способ, с помощью которого я могу динамически извлекать значения из xml вместо записи

xsl: value-of select = "tag ..."

каждый раз, когда я добавляю новый узел в тег caseStudy.Я включаю файлы xml и xsl ниже.

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="caseStudies.xsl"?>

<caseStudiesList>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
        <tag4 label="tag4">TAG4_value</tag4>
        <tag5 label="tag5">TAG5_value</tag5>
    </caseStudy>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
    </caseStudy>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
        <tag4 label="tag4">TAG4_value</tag4>
        <tag5 label="tag5">TAG5_value</tag5>
        <tag6 label="tag6">TAG6_value</tag6>
        <tag7 label="tag7">TAG7_value</tag7>
    </caseStudy>
</caseStudiesList>

XSL

<?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>
        <head>
        </head>
        <body>
            <xsl:for-each select="caseStudiesList/caseStudy">
                <div class="caseStudyContainer ">
                    <ul>
                        <li>
                            <span><xsl:value-of select="tag1/@label" /></span>
                            <xsl:value-of select="tag1" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag2/@label" /></span>
                            <xsl:value-of select="tag2" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag3/@label" /></span>
                            <xsl:value-of select="tag3" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag4/@label" /></span>
                            <xsl:value-of select="tag4" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag5/@label" /></span>
                            <xsl:value-of select="tag5" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag6/@label" /></span>
                            <xsl:value-of select="tag6" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag7/@label" /></span>
                            <xsl:value-of select="tag7" />                          
                        </li>
                    </ul>
                </div>
            </xsl:for-each>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

Надеюсь, что у меня есть какой-то смысл. Есть ли способ получить значения динамическив XSL из файла XML?

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Вам просто нужно вложить другое для каждого ...

<?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>
    <head>
    </head>
    <body>
        <xsl:for-each select="caseStudiesList/caseStudy">
        <div class="caseStudyContainer ">
            <ul>
              <xsl:for-each select="*">
                <li>
                    <span><xsl:value-of select="@label" /></span>
                    <xsl:value-of select="." />                          
                </li>
              </xsl:for-each>
            </ul>
        </div>
        </xsl:for-each>
    </body>
    </html>
</xsl:template>
</xsl:stylesheet>
0 голосов
/ 20 сентября 2011

Как правило, в XML не рекомендуется использовать разные имена тегов для ссылки на один и тот же тип данных.Это одна ситуация, когда это правило действительно входит в картину.Вы уже знаете, как использовать for-each, так почему бы не применить его здесь?

 <xsl:for-each select="caseStudiesList/caseStudy">
                <div class="caseStudyContainer ">
                    <ul><xsl:for-each select="tag"><li><span><xsl:value-of select="@label" /></span><xsl:value-of select="." /></li>
                       </xsl:for-each></ul>
</div>
</xsl:for-each>

Просто назовите каждый из отдельных элементов tag вместо tag1 tag2 и т. Д. И, ну, рассмотримболее разумное имя, чем "tag".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...