对于XSLT来说,我是新手,我想把我的XML文件压平,以便(稍后)摄入到SQL中。目前,我在遍历XML文档时遇到了困难。目前,它获取标记的数量,但返回相同的值。此外,当循环中有循环时,似乎存在一个根本不获取值的问题。
XML:
<?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当前的样子
<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>结果输出如下所示
<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>发布于 2018-12-28 03:25:39
Num的上下文中。为了获得当前Num的值,需要执行以下操作:
你所做的:
选择当前节点的first Num子节点的父节点--这对于每个Num来说都是相同的。PrimNam的上下文中。为了从这里获得Surnm值,您必须执行以下操作:
的值
不是:
因为Surnm是子 of PrimNam。这同样适用于您无法选择的其他节点。请注意,使用xsl:copy可以大大缩短样式表-例如:
<xsl:copy-of select="Example/New"/>而不是:
<New><xsl:value-of select="Example/New"/></New>https://stackoverflow.com/questions/53952280
复制相似问题