XSLT, нацеленный на элемент в зависимости от типа CustomTagAttribs - PullRequest
1 голос
/ 09 декабря 2010

У меня есть документ XML, который показывает это:

<Element>
  <Content>

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

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

  </Content>
<Element>

И есть еще один экземпляр <Element>, такой же, как приведенный выше, но без <type>breadcrumb</type>.Я хочу предназначаться для LBarItems только в <Element>, который имеет тип крошки.Как мне это сделать?

Это то, что я пытался:

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

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Почему вы не используете:

/Element/Content[CustomTagAttribs/type = 'breadcrumb']/ElementData/LBarItem
1 голос
/ 09 декабря 2010

Вам вообще не нужно использовать <xsl:for-each> и любую условную логику.

Это преобразование :

<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>

при применении к этому документу XML (содержит два элемента Element):

<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>

дает желаемый, правильный результат :

<LBarItem>I have "breadcrumb" type</LBarItem>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...