Xml XPath/XSLT选择所有同级,包括self

Xml XPath/XSLT选择所有同级,包括self,xml,xslt,xpath,nodes,axes,Xml,Xslt,Xpath,Nodes,Axes,我希望我的XSLT检查检查随机面板选项卡中的所有是否为空。如果它们都是空的,我希望它返回所有都是空的,但是如果它们不是空的,我希望面板选项卡的内容和字段位于中,即与XML中位置相同的内容。请帮帮我。 XML: H1 氢 D1 D2 x1 x2 当前XSLT: <xsl:template match='contentTabs'> <ul id='ulTabKopjes' class='tabKopjes'> <li onclick='verschuifTab

我希望我的XSLT检查检查随机面板选项卡中的所有
是否为空。如果它们都是空的,我希望它返回
所有都是空的

,但是如果它们不是空的,我希望面板选项卡的内容和字段位于
中,即与XML中位置相同的内容。请帮帮我。

XML:


H1
氢
D1
D2
x1
x2
当前XSLT:

<xsl:template match='contentTabs'>
 <ul id='ulTabKopjes' class='tabKopjes'>
  <li onclick='verschuifTabs(this)'>&#60;</li>
   <xsl:call-template name='liHeaders' />
  <li onclick='verschuifTabs(this)'>&#62;</li>
 </ul>
 <div class='tabContent'>
  <xsl:apply-templates />
 </div>
</xsl:template>

<xsl:template name='liHeaders'>
 <xsl:for-each select='panelTabs'>
  <li onclick='loadPanelTabContent(this)'>
   <xsl:value-of select="@text" />
  </li>
 </xsl:for-each>
</xsl:template>

<xsl:template match="panelTabs">
 <div class="tabItems">
  <xsl:attribute name="id">
   <xsl:text>tabnr</xsl:text><xsl:value-of select="position()" />
  </xsl:attribute>
  <xsl:apply-templates />
 </div> 
</xsl:template>

<xsl:template match="panelTabs[not(field[normalize-space()])]">
 <p>All are empty</p>
</xsl:template>

<xsl:template match="panelTabs/field">
 <p><xsl:value-of select="." /></p>
</xsl:template>

<xsl:template match="panelTabs/field[not(normalize-space())]" priority="2" />

  • &62
  • 塔布纳 都是空的

  • 仅在没有最后一个

    想要输出,比如:

    <ul id='ulTabKopjes' class='tabKopjes'>
     <li onclick='verschuifTabs(this)'>&#60;</li>
     <li onclick='loadPanelTabContent(this)'>a</li>
     <li onclick='loadPanelTabContent(this)'>b</li>
     <li onclick='loadPanelTabContent(this)'>c</li>
     <li onclick='verschuifTabs(this)'>&#62;</li>
    </ul>
    <div id='tabContent'>
     <div class='tabItems' id='tabnr1'>
      <table>something</table>
     </div>
     <div class='tabItems' id='tabnr2'>
      <p>All fields are empty</p>
     </div>
     <div class='tabItems' id='tabnr3'>
      <p>x1</p>
      <p>x2</p>
     </div>
    </div>
    
    • a
    • b
    • c
    
    
    • &62
  • 塔布纳 都是空的

    某物
  • 您可以使用以下命令。 请注意,您的输出不是格式良好的XML。如果希望它格式良好,请添加根元素

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match='contentTabs'>
        <ul id='ulTabKopjes' class='tabKopjes'>
            <li onclick='verschuifTabs(this)'>&#60;</li>
            <xsl:call-template name='liHeaders' />
            <li onclick='verschuifTabs(this)'>&#62;</li>
        </ul>
        <div class='tabContent'>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template name='liHeaders'>
        <xsl:for-each select='panelTabs'>
            <li onclick='loadPanelTabContent(this)'>
                <xsl:value-of select="@text" />
            </li>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="panelTabs">
        <div class="tabItems">
            <xsl:attribute name="id">
                <xsl:text>tabnr</xsl:text>
                <xsl:value-of select="position()" />
            </xsl:attribute>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template match="panelTabs[field[normalize-space() = '']]">
        <div class="tabItems">
            <p>All fields are empty</p>
        </div>
    </xsl:template>
    <xsl:template match="panelTabs[not(field)]">
        <div class="tabItems">
            <table>something</table>
        </div>
    </xsl:template>
    <xsl:template match="panelTabs/field">
        <p>
            <xsl:value-of select="." />
        </p>
    </xsl:template>
    </xsl:stylesheet>
    
    
    
    • &62
  • 塔布纳 所有字段都是空的

    某物


  • 你能添加一个
    panelTab
    ,其中字段有一些值,并显示预期的输出吗?@LingamurthyCS我编辑了XML,希望我的帖子能够输出。这似乎可行,唯一的问题是所有panelTab的所有内容(除了有空字段的内容)都打印了两次。NVM,我修复了这个问题,这是另一个问题。很好用,非常感谢!当存在数量可变的空字段时,是否有一种简单的方法来实现这一点?
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match='contentTabs'>
        <ul id='ulTabKopjes' class='tabKopjes'>
            <li onclick='verschuifTabs(this)'>&#60;</li>
            <xsl:call-template name='liHeaders' />
            <li onclick='verschuifTabs(this)'>&#62;</li>
        </ul>
        <div class='tabContent'>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template name='liHeaders'>
        <xsl:for-each select='panelTabs'>
            <li onclick='loadPanelTabContent(this)'>
                <xsl:value-of select="@text" />
            </li>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="panelTabs">
        <div class="tabItems">
            <xsl:attribute name="id">
                <xsl:text>tabnr</xsl:text>
                <xsl:value-of select="position()" />
            </xsl:attribute>
            <xsl:apply-templates />
        </div>
    </xsl:template>
    <xsl:template match="panelTabs[field[normalize-space() = '']]">
        <div class="tabItems">
            <p>All fields are empty</p>
        </div>
    </xsl:template>
    <xsl:template match="panelTabs[not(field)]">
        <div class="tabItems">
            <table>something</table>
        </div>
    </xsl:template>
    <xsl:template match="panelTabs/field">
        <p>
            <xsl:value-of select="." />
        </p>
    </xsl:template>
    </xsl:stylesheet>