2014-09-27 6 views
0
<xsl:for-each select="class/student"> 
     ID: <xsl:value-of select="id"/><br/> 
      Name: <xsl:value-of select="lastName"/>,<xsl:value-of select="firstName"/><br/> 
      Date: <xsl:value-of select="date"/><br/> 
      Major: <xsl:if test="major[@Year > 2008]"> 
        <xsl:value-of select="major"/> , 
        declared in: <xsl:value-of select="major[@Year]"/>  
        </xsl:if><br/><br/> 
      </xsl:for-each> 

XML code`:XSL: если тест не работает, как ожидалось

 <student> 
    <id>1000001</id> 
    <lastName>john</lastName> 
    <firstName>Doe</firstName> 
    <date format="d">08/25/2006</date> 
    <major Year="2006">CS:BS</major> 
    </student> 

выход:

 
ID: 1000001 
Name: Doe,John 
Date-enrolled: August 25, 2006 
Major: CS:BS , declared in: CS:BS 

код XML выше всего лишь пример фактического кода XML, есть больше «Годовых» значений/элементов.

Привет, ребята,

Im пытается получить только крупные фирмы, чьи год больше, чем 2008, по какой-то причине им получить неверный вывод.

благодарит

+0

Чтобы быть в состоянии помочь, нам действительно нужно, чтобы увидеть больше вашего входного XML, и достаточно вашего XSLT, чтобы воссоздать (а не только какой-то XSLT, который прокомментирован). Показывать ваш ожидаемый и фактический результат также поможет, поскольку вы говорите, что вы получаете неправильный результат, немного расплывчато. Спасибо! –

+0

просто добавлено больше, спасибо! – user3434926

+0

Это лучше ... Хотя ваш XSLT относится к элементу 'class', который не отображается в вашем XML-файле. Кроме того, на выходе отображается ваш фактический результат, который вы получаете сейчас, или ваш ожидаемый результат? –

ответ

0

Вы говорите «есть еще„Ежегодник“значения/элементы», чем показано, и это может быть ключом к проблеме. Если вход содержит два элемента

<major Year="2006">CS:BS</major> 
<major Year="2009">CS:BS</major> 

затем test="major/@Year > 2008" возвращает истину, потому что один из таких элементов, а в XSLT 1.0, <xsl:value-of select="major"/> будет выводить первый выбранный элемент (в 2.0 это вызовет ошибку).

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

0

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

Это должно исправить проблему:

Major: 
<xsl:for-each select="major[@Year > 2008]"> 
    <br/> 
    <xsl:value-of select="."/>, declared in: <xsl:value-of select="@Year"/> 
</xsl:for-each> 
<br/> 

Ваше использование

<xsl:value-of select="major[@Year]"/> 

также неправильно. Ниже будет иметь фактически выходное значение года:

<xsl:value-of select="major/@Year"/> 

Я настоятельно рекомендую использовать либо <xsl:text> или <xsl:value-of> для статического текста. Ваш текущий подход дождевания текста всей вашей XSLT в результате очень грязный вид кода XSLT:

<xsl:for-each select="class/student"> 
    <xsl:value-of select="concat('ID: ', id)"/> 
    <br/> 
    <xsl:value-of select="concat('Name: ', lastName, ',', firstName)"/> 
    <br/> 
    <xsl:value-of select="concat('Date: ', date)"/> 
    <br/> 
    <xsl:text>Major:</xsl:text> 
    <xsl:for-each select="major[@Year > 2008]"> 
    <br/> 
    <xsl:value-of select="concat(., ', declared in: ', @Year)"/> 
    </xsl:for-each> 
    <br/> 
</xsl:for-each> 
Смежные вопросы