2010-12-09 5 views
1

ich ein XML-Dokument haben, das zeigt:XSLT ein Element Targeting auf einen Typ CustomTagAttribs je

<Element> 
    <Content> 

    <CustomTagAttribs> 
     <type>breadcrumb</type> 
    </CustomTagAttribs> 

    <ElementData> 
     <LBarItem>TEXT!</LBarItem> 
    </ElementData> 

    </Content> 
<Element> 

Und es ist ein weiterer <Element> Beispiel wie die oben, aber ohne die <type>breadcrumb</type>. Ich möchte die LBarItems nur in der 10, die den Breadcrumb-Typ hat, ausrichten. Wie würde ich das tun?

Dies ist, was ich habe versucht worden:

<xsl:for-each select="//Content/ElementData/LBarItem"> 
    <xsl:if test="../type='breadcrumb'"> 
    <xsl:value-of select="Title"/> 
    </xsl:if> 
</xsl:for-each> 

Jede Hilfe?

+0

Gute Frage, +1. Sehen Sie meine Antwort für eine vollständige Lösung, die zeigt, wie vermieden werden kann, bedingte Logik vollständig zu verwenden, wenn solche Probleme gelöst werden. :) –

Antwort

2

Warum gehst du nicht verwenden:

/Element/Content[CustomTagAttribs/type = 'breadcrumb']/ElementData/LBarItem 
+0

werde ich jetzt! Vielen Dank! – jrottier

+0

@jrottier: Sie sind willkommen. –

+0

Also gibt es eine Möglichkeit, LBarItems anzugeben, die sich NICHT innerhalb des "breadcrumb" -Elements befinden? Das andere Element, das ich habe, hat keinen Typ angegeben, so dass ich es nicht anvisieren kann. Ich habe versucht, "!" zu CustomTagAttribs/type! = 'breadcrumb', aber das schien nicht zu funktionieren. – jrottier

1

Sie brauchen nicht auf alle <xsl:for-each> und jede bedingte Logik zu verwenden.

Diese Transformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
    <xsl:template match="Content[CustomTagAttribs/type='breadcrumb']/*/LBarItem"> 
     <xsl:copy-of select="."/> 
    </xsl:template> 
    <xsl:template match="text()"/> 
</xsl:stylesheet> 

wenn auf diesem XML-Dokument angewendet (mit zwei Element Elemente):

<t> 
    <Element> 
     <Content> 
      <CustomTagAttribs> 
       <type>breadcrumb</type> 
      </CustomTagAttribs> 
      <ElementData> 
       <LBarItem>I have "breadcrumb" type</LBarItem> 
      </ElementData> 
     </Content> 
    </Element> 
    <Element> 
     <Content> 
      <CustomTagAttribs> 
       <type>something else</type> 
      </CustomTagAttribs> 
      <ElementData> 
       <LBarItem>I have "something else" type</LBarItem> 
      </ElementData> 
     </Content> 
    </Element> 
</t> 

erzeugt die gewünschte, korrekte Ergebnis:

<LBarItem>I have "breadcrumb" type</LBarItem> 
+0

Danke! Sehr hilfreich! – jrottier

Verwandte Themen