首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回相同值的XSLT循环。

返回相同值的XSLT循环。
EN

Stack Overflow用户
提问于 2018-12-28 00:14:37
回答 2查看 302关注 0票数 0

对于XSLT来说,我是新手,我想把我的XML文件压平,以便(稍后)摄入到SQL中。目前,我在遍历XML文档时遇到了困难。目前,它获取标记的数量,但返回相同的值。此外,当循环中有循环时,似乎存在一个根本不获取值的问题。

XML:

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<Example>
  <Num>12</Num>
  <Num>13</Num>
  <Num>14</Num>
  <Num>15</Num>
  <Num>16</Num>
  <New>N</New>
  <Age>118</Age>
  <Name>
    <PrimNam>
      <Surnm>SAM</Surnm>
      <FstNm>SAM</FstNm>
      <SecNm>SAM</SecNm>
    </PrimNam>
    <Alias>
      <Id>12</Id>
      <DOB>01/01/1900</DOB>
      <AliasNam>
        <Surnm>SAM</Surnm>
        <FstNm>SAMUEL</FstNm>
      </AliasNam>
      <AliasDate>28/12/2018</AliasDate>
    </Alias>
  </Name>
</Example>

下面是我的XSLT当前的样子

代码语言:javascript
运行
复制
<xsl:for-each select="Example/Num">
    <Num><xsl:value-of select="../Num"/></Num>
</xsl:for-each>

    <New><xsl:value-of select="Example/New"/></New>
    <Age><xsl:value-of select="Example/Age"/></Age>

    <xsl:for-each select="Example/Name/PrimNam">
        <Surnm><xsl:value-of select="../../Surnm"/></Surnm>
        <FstNm><xsl:value-of select="../../FstNm"/></FstNm>
        <SecNm><xsl:value-of select="../../SecNm"/></SecNm>
    </xsl:for-each>
    <xsl:for-each select="Example/Name/Alias">
        <Id><xsl:value-of select="../../Id"/></Id>
        <DOB><xsl:value-of select="../../DOB"/></DOB>
            <xsl:for-each select="Example/Name/Alias/AliasNam">
                <Surnm><xsl:value-of select="../../../Surnm"/></Surnm>
                <FstNm><xsl:value-of select="../../../FstNm"/></FstNm>
            </xsl:for-each>
        <AliasDate><xsl:value-of select="../../AliasDate"/></AliasDate>
    </xsl:for-each>

结果输出如下所示

代码语言:javascript
运行
复制
<Num>12</Num>
<Num>12</Num>
<Num>12</Num>
<Num>12</Num>
<Num>12</Num>
<New>N</NewCon>
<Age>118</Age>
<Surnm></Surnm>
<FstNm></FstNm>
<SecNm></SecNm>
<Id></Id>
<DOB></DOB>
<AliasDate></AliasDate>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-28 03:25:39

  1. 说明: 将您置于Num的上下文中。为了获得当前Num的值,需要执行以下操作: 你所做的: 选择当前节点的first Num子节点的父节点--这对于每个Num来说都是相同的。
  2. 指示: 将您置于PrimNam的上下文中。为了从这里获得Surnm值,您必须执行以下操作: 的值 不是: 因为Surnm是子 of PrimNam。这同样适用于您无法选择的其他节点。

请注意,使用xsl:copy可以大大缩短样式表-例如:

代码语言:javascript
运行
复制
<xsl:copy-of select="Example/New"/>

而不是:

代码语言:javascript
运行
复制
<New><xsl:value-of select="Example/New"/></New>
票数 0
EN

Stack Overflow用户

发布于 2018-12-28 01:08:09

您似乎想要将XML扁平化。

一种可能是以下XSLT1.0模板:

代码语言:javascript
运行
复制
<xsl:template match="Example/Num | Example/New | Example/Age | Example/Name/PrimNam/* | Example/Name/Alias/Id | Example/Name/Alias/DOB | Example/Name/Alias/AliasNam/* | Example/Name/Alias/AliasDate">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

产出如下:

代码语言:javascript
运行
复制
<Num>12</Num>
<Num>13</Num>
<Num>14</Num>
<Num>15</Num>
<Num>16</Num>
<New>N</New>
<Age>118</Age>
<Surnm>SAM1</Surnm>
<FstNm>SAM2</FstNm>
<SecNm>SAM3</SecNm>
<Id>12</Id>
<DOB>01/01/1900</DOB>
<Surnm>SAM</Surnm>
<FstNm>SAMUEL</FstNm>
<AliasDate>28/12/2018</AliasDate>

这是输入XML的扁平版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53952280

复制
相关文章

相似问题

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