xslt для каждого не работает - PullRequest
0 голосов
/ 18 мая 2018

xml

<MessageBody>
    <SerialNumbers>
        <cmn:Serial>010088202501033821100011946933</cmn:Serial>
        <cmn:Serial>010088202501033821100015310495</cmn:Serial>
        <cmn:Serial>010088202501033821100018139350</cmn:Serial>
        <cmn:Serial>010088202501033821100012121992</cmn:Serial>
        <cmn:Serial>010088202501033821100016483276</cmn:Serial>
        <cmn:Serial>010088202501033821100012414042</cmn:Serial>
        <cmn:Serial>010088202501033821100011320392</cmn:Serial>
        <cmn:Serial>010088202501033821100016102891</cmn:Serial>
        <cmn:Serial>010088202501033821100013578725</cmn:Serial>
        <cmn:Serial>010088202501033821100018119185</cmn:Serial>
    </SerialNumbers>

</MessageBody>

xslt

    <xsl:for-each select="cmn:Serial">
    <fieldvalidation>
                <validtedfield>Serial</validtedfield>
                <value><xsl:value-of select="SerialNumbers/cmn:Serial"/></value>
        <xsl:choose>
            <xsl:when test="SerialNumbers/cmn:Serial != ''">    
                <status>Valid</status>
                <reason></reason>
            </xsl:when>
            <xsl:otherwise> 
                <status>Not Valid</status>
                <reason>Serial should not be empty.</reason>
            </xsl:otherwise>
        </xsl:choose>
    </fieldvalidation>
</xsl:for-each>

Я пытался преобразовать преобразование, но я борюсь, у меня не получилось ни одного преобразования ошибок, работающего нормально для других тегов xml, но сериалы непоказано на выходе xml

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Для каждого выражения выбора требуется либо полностью определенное выражение для списка узлов, который нужно выбрать, либо опция подстановочного знака, чтобы выбрать все на любом уровне глубины, как показано ниже.Это должно работать для вас:

xsl:for-each select="//cmn:Serial"
0 голосов
/ 20 мая 2018

Привет, наконец, я получил правильный ответ

    <xsl:for-each select="//cmn:Serial">
    <fieldvalidation>
                <validtedfield>Serial</validtedfield>
                <value><xsl:value-of select="."/></value>
        <xsl:choose>
            <xsl:when test=".!= ''">    
                <status>Valid</status>
                <reason></reason>
            </xsl:when>
            <xsl:otherwise> 
                <status>Not Valid</status>
                <reason>Serial should not be empty.</reason>
            </xsl:otherwise>
        </xsl:choose>
    </fieldvalidation>
</xsl:for-each>

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

0 голосов
/ 18 мая 2018

Если for-each обрабатывает элементы cmn:Serial, то пути внутри должны быть относительными, поэтому для выбора каждого элемента внутри вместо <value><xsl:value-of select="SerialNumbers/cmn:Serial"/></value> вам просто нужно <value><xsl:value-of select="."/></value>, а вместо test="SerialNumbers/cmn:Serial != ''" вам просто нужно test=". != ''".

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