Как использовать условия if (или когда) для атрибута внутри шаблона в xslt - PullRequest
0 голосов
/ 15 апреля 2011

HI All,

Как использовать условие if для атрибута для печати другого значения, когда оно зацикливается каждый раз.У меня есть атрибут с именем «AttributeName».Это будет другое имя, когда оно будет зацикливаться каждый раз (всего 5 раз).

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

Входной XML:

<?xml version="1.0" encoding="UTF-8"?>
    </Solution>
    <Solution>
        <ID>22060000000000000000000002</ID>
        <Title>ABCD</Title>
        <Observations>
            <Observation>DEF</Observation>
        </Observations>
        <ProblemDescription> 1234</ProblemDescription>
        <ProblemCause>ADDD</ProblemCause>
        <RepairProcedures>
            <RepairProcedure>XYZ</RepairProcedure>
        </RepairProcedures>
        <ScenarioExplanation>
            <Scenario>JIJIJIJIJI</Scenario>
            <Scenario>SCENARIO1.</Scenario>
        </ScenarioExplanation>
        <DocumentReferences>
            <DocRef>NO DATA</DocRef>
        </DocumentReferences>
    </Solution>
</Solutions>

XSLT:

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  

<xsl:stylesheet><xsl:template>  
            <xsl:element name="Tables">

            <!-- Tables code here -->

            </xsl:element>
            <xsl:element name="Relationships">
                <xsl:for-each select="Solutions/Solution">
                    <xsl:if test="RepairProcedures/RepairProcedure!= ''  ">
                        <xsl:for-each select="RepairProcedures/RepairProcedure">
                            <xsl:variable name="vNumCols" select="5"/>
                            <xsl:element name="Relationship">
                                <xsl:for-each select="position() &lt; vNumCols">
                                    <xsl:attribute name="Action"><xsl:value-of select="'Insert'"/></xsl:attribute>
                                    <xsl:attribute name="DestinationKey"><xsl:value-of select="1"/></xsl:attribute>
                                    <xsl:attribute name="RelationshipSpec"><xsl:value-of select="'TableName'"/></xsl:attribute>
                                    <xsl:attribute name="SourceKey"><xsl:value-of select="1"/></xsl:attribute>
                                    <xsl:attribute name="RelCommonKey"><xsl:value-of select="1"/></xsl:attribute>
                                    <xsl:attribute name="AttributeName">
                                    <xsl:if test="position() = 1"><xsl:value-of select="CPComments"/></xsl:if>
                                    <xsl:if test="position() = 2"><xsl:value-of select="CPConflict"/></xsl:if>
                                    </xsl:attribute>
                                    <xsl:attribute name="AttributeValue"><xsl:value-of select="1"/></xsl:attribute>
                                </xsl:for-each>
                            </xsl:element>
                        </xsl:for-each>
                    </xsl:if>
                </xsl:for-each>
            </xsl:element>
        </xsl:element>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

Я зацикливаюсь на repairprocedures / repairprocedure, чтобы получить текст "RelationshipSpec".

Ожидаемый результат

<Relationships>
<Relationship Action="Delete" DestinationKey="1" RelationshipSpec="XYZ" SourceKey="2" RelCommonKey="1_2" AttributeName="CPComments" AttributeValue=""/>  
<Relationship Action="Delete" DestinationKey="1" RelationshipSpec="XYZ" SourceKey="2" RelCommonKey="1_2" AttributeName="CPConflict" AttributeValue=""/>
<Relationship Action="Delete" DestinationKey="1" RelationshipSpec="XYZ" SourceKey="2" RelCommonKey="1_2" AttributeName="CPUserID" AttributeValue=""/>
<Relationship Action="Delete" DestinationKey="1" RelationshipSpec="XYZ" SourceKey="2" RelCommonKey="1_2" AttributeName="ProcessID" AttributeValue=""/>
<Relationship Action="Delete" DestinationKey="1" RelationshipSpec="XYZ" SourceKey="2" RelCommonKey="1_2" AttributeName="ProductId" AttributeValue=""/>         
</Relationships>

Единственное значение, измененное в этих5 строк это "AttributeName".Я пытаюсь напечатать 5 строк для одного отношения, отличающегося AttributeName.

Пожалуйста, помогите мне в этом.

Я использую XSLT 1.0

Спасибо, Рамм

1 Ответ

0 голосов
/ 15 апреля 2011

Не имеет ничего общего с:

<xsl:if test="position() = 1">
    <xsl:attribute name="FirstAttribute">
        <xsl:value-of select="CPComments"/>
    </xsl:attribute>
</xsl:if>
<xsl:if test="position() = 2">
    <xsl:attribute name="SecondAttribute">
        <xsl:value-of select="CPConflict"/>
    </xsl:attribute>
</xsl:if>

работа

Я бы, наверное, предпочел <xsl:choose>, но все равно это не было бы короче.

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