2011-07-31 5 views
-1

Я имею в файле XML, как этотПеребор элементов XML в XSL

<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> 

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

+1

Кажется очевидным для меня: см. Мой ответ. Примечание. Из определения проблемы я все еще не вижу, какую задачу вы решаете - вы * должны * предоставить * реальный * XML-документ и, самое главное, точный желаемый результат. –

ответ

1

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

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

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

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

+0

Hi Dimitre Пожалуйста, найдите приведенную ниже ссылку. Это сценарий, в котором я точно работаю. В этом сообщении он отлично работает для одного столбца состояния, я хочу применить, если List имеет несколько столбцов состояния. http://www.glynblogs.com/2011/04/overriding-the-presentation-of-an-xslt-list-view-web-part.html#comment-10781 Пожалуйста, перейдите по ссылке выше, вы будете понятно понимать. Цените свое время. – SP10

+1

@ user547077: Почему, по-вашему, сообщение в блоге ясно прояснит ситуацию? Точно нет. Мне кажется, что вы не знаете, в чем проблема, потому что вы не можете это описать. –

+0

Dimitre, я разместил точные требования к выходу в этой ниже ссылке, так как текущий поток не принимает форматированный текст. http://stackoverflow.com/questions/6893396/loop-through-xml-elements-in-xsl – SP10

1

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

дал 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> 

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

+0

Jonfen, Спасибо за ответ, Здесь сценарий, в котором я работаю. То же самое я должен применить для нескольких столбцов. пожалуйста, перейдите по этой ссылке http://www.glynblogs.com/2011/04/overriding-the-presentation-of-an-xslt-list-view-web-part.html#comment-10781 Спасибо, – SP10

Смежные вопросы