Проход по элементам XML в XSL - PullRequest
       2

Проход по элементам XML в XSL

0 голосов
/ 01 августа 2011

У меня есть в XML-файле, как это

<ViewFields> 
<FieldRef Name="Approval Status" /> 
<FieldRef Name="Requirement Status" /> 
<FieldRef Name="Development Status" /> 
<FieldRef Name="Testing Status" />
</ViewStatus>

У меня есть следующий XSL-код для получения значений FieldRef.

<xsl:template name="FieldRef_body.Status" match="FieldRef[@Name='ViewFields/FieldRef[1]/@Name']" mode="body">
        <xsl:param name="thisNode" select="."/>
            <xsl:choose>
                <xsl:when test="$thisNode/@*[name()=current()/@Name] = 'Completed'">
                    <img src="/_layouts/images/IMNON.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:when>
                <xsl:when test="$thisNode/@*[name()=current()/@Name] = 'In Progress'">
                    <img src="/_layouts/images/IMNIDLE.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:when>
                <xsl:otherwise>
                    <img src="/_layouts/images/IMNBUSY.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:otherwise>
            </xsl:choose>
    </xsl:template>

Я пытаюсь выполнить LOOP через FieldRef * [x] *, чтобы получить значения одно за другим, ничего не возвращается. Я хочу присвоить значения FieldRef переменной @Name через цикл.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Ваш вопрос не имеет всего контекста, необходимого для правильного ответа, но вы должны рассмотреть возможность упрощения вашей конструкции до "для каждого" для вашего цикла.

дано xml

<ViewFields> 
<FieldRef Name="Approval Status" />
<FieldRef Name="Requirement Status" /> 
<FieldRef Name="Development Status" /> 
<FieldRef Name="Testing Status" />
</ViewFields>

с xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="main" match="/">
    <xsl:for-each select="/ViewFields/FieldRef">
        <xsl:choose>
            <xsl:when test="@Name = 'Approval Status'">
                <ApprovalStatus/>
            </xsl:when>
            <xsl:when test="@Name = 'Requirement Status'">
                <RequirementStatus/>
            </xsl:when>
            <xsl:otherwise>
                <SomethingElse/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
</xsl:template>

Это может быть немного ближе к тому, что вы хотели.

1 голос
/ 01 августа 2011

Это очевидно :

  1. match="FieldRef[@Name='ViewFields/FieldRef[1]/@Name']". Атрибут Name не имеет в качестве строкового значения строку 'ViewFields/FieldRef[1]/@Name'. Скорее всего, вам нужно выражение XPath, а не строка. Используйте match="FieldRef[@Name=ViewFields/FieldRef[1]/@Name]"

  2. В предоставленном XML-документе отсутствует атрибут Name со строковым значением "Completed" или со строковым значением "In Progress".

  3. Кроме того, в документе XML вообще отсутствует атрибут Status.

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