首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT中的XPath没有给出所有成员

XSLT中的XPath没有给出所有成员
EN

Stack Overflow用户
提问于 2013-12-31 20:16:30
回答 1查看 98关注 0票数 0

我有XML,所以:

代码语言:javascript
运行
复制
<Root>
  <ID>NSA</ID>
  <Groups>
    <Group>
      <ID>Europe</ID>
      <Levels>
        <Level>
          <RootLevelID>Cases B</RootLevelID>
          <Faults>
            <Fault>
              <FaultID>case 1</FaultID>
            </Fault>
            <Fault>
              <FaultID>case 2</FaultID>
            </Fault>
          </Faults>
        </Level>
      </Levels>
    </Group>
  </Groups>
</Root>

出于可读性的考虑,我使用以下XSL将其设置为html:

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0">
  <xsl:output omit-xml-declaration="yes" method="html"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Output</title>
      </head>
      <body>
        <xsl:for-each select="//Root">
          <Table border="1">
            <Th>
              <xsl:value-of select="ID"/>
            </Th>
            <Tr>
              <td>
                <xsl:for-each select="current()//Group">

                  <xsl:for-each select="current()//Level">
                    <tr>
                      <td>
                        <xsl:value-of select="current()//RootLevelID"/> Level name <xsl:for-each
                          select="current()//Fault"> <td>
                            <xsl:value-of select="FaultID"/> Fault name </td> </xsl:for-each>
                      </td>
                    </tr>
                  </xsl:for-each>
                </xsl:for-each>
              </td>
            </Tr>
          </Table>
          <br/>
          <br/>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

但我只会得到第一个错误成员,而不是所有成员,即使它在for-each循环中。它只输出"case 1“。

但是,由于这是更大上下文的一部分,前两个for-each循环(Root和Group )正确地迭代了xml中的所有组成员。

也许嵌套的for-each循环在XPATH中不能很好地工作?

EN

回答 1

Stack Overflow用户

发布于 2014-01-01 02:25:39

正如@Tim C所指出的,您的xslt不是很优雅,但确实可以工作。需要注意的是,我不确定为什么要使用current(),因为您可以轻松地按文档顺序处理xml:

代码语言:javascript
运行
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" method="html"/>
    <xsl:template match="/">
        <html>
            <head>
                <title>Output</title>
            </head>
            <body>
                <xsl:for-each select="/Root">
                    <table border="1">
                        <th>
                            <xsl:value-of select="ID"/>
                        </th>
                        <tr>
                            <td>
                                <xsl:for-each select="Groups/Group">
                                    <xsl:for-each select="Levels/Level">
                                        <tr>
                                            <td>
                                                <xsl:value-of select="RootLevelID"/>
                                                <xsl:text> Level name</xsl:text>
                                                <xsl:for-each select="Faults/Fault">
                                                    <td>
                                                        <xsl:value-of select="FaultID"/>
                                                        <xsl:text>Fault name </xsl:text>
                                                    </td>
                                                </xsl:for-each>
                                            </td>
                                        </tr>
                                    </xsl:for-each>
                                </xsl:for-each>
                            </td>
                        </tr>
                    </table>
                    <br/>
                    <br/>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20857264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档