2015-10-05 1 views
0

Я новичок в xsl и пытаюсь преобразовать ответ мыла в простой html с помощью xslt. Мой желаемый результат должен отображать дочерние элементы каждого узла siteSummaryList в списке абзацев. Моя проблема в том, что на выходе отображается только первое совпадение (TEST SITE 1 в примере ниже). Любопытно, что он отображает его дважды, указывая на то, что он находит второе совпадение, но снова отображает 1-й данные. Может ли кто-нибудь увидеть или объяснить, что я делаю неправильно?Преобразование XSLT только отображение 1-го совпадения

Благодаря

XML

<ns:getSitesResponse xmlns:ns="http://scada.api.web.companyx"> 
<ns:return 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:ax226="http://scada.response.entity.web.companyx/xsd" xsi:type="ax226:SiteSummaryResponse"> 

<ax226:siteSummaryList xsi:type="ax226:SiteSummary"> 
<ax226:alarmCount>8</ax226:alarmCount> 
<ax226:label>TEST SITE 1</ax226:label> 
<ax226:typeLabel>TYPE 1</ax226:typeLabel> 
</ax226:siteSummaryList> 

<ax226:siteSummaryList xsi:type="ax226:SiteSummary"> 
<ax226:alarmCount>6</ax226:alarmCount> 
<ax226:label>TEST SITE 2</ax226:label> 
<ax226:typeLabel>TYPE 2</ax226:typeLabel> 
</ax226:siteSummaryList> 
</ns:return> 
</ns:getSitesResponse> 

XSLT

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:p="http://scada.response.entity.web.companyx/xsd" exclude-result-prefixes="p"> 

<xsl:output method="html" indent="no" /> 

    <xsl:template match="/"> 
       <xsl:apply-templates select="//p:siteSummaryList" /> 
    </xsl:template> 

    <xsl:template match="//p:siteSummaryList"> 
     <p><xsl:value-of select="//p:label" /></p> 
     <p><xsl:value-of select="//p:typeLabel" /></p> 
     <p><xsl:value-of select="//p:alarmCount" /></p>   
    </xsl:template> 
</xsl:stylesheet> 

ответ

0

Изменение:

<xsl:value-of select="//p:label" /> 

к:

<xsl:value-of select="p:label" /> 

Выражение //p:label выбирает все узлы p:label во всем документе, начиная с корневого узла - и (в XSLT 1.0) xsl:value-of возвращает строковое значение первого одного из них.

Обратите внимание, что начиная с сопоставимый образец с // является избыточным.

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