xml - XSLT 循环返回相同的值
问题描述
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>
解决方案
您似乎想要展平您的 XML。
一种可能性是以下 XSLT-1.0 模板:
<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>
输出是:
<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 的扁平化版本。
推荐阅读
- android - GoogleApiManager 中的 getApplicationContext() 方法 NullPointerException
- aws-lambda - 如何检查 AWS Lambda 上次修改的时间戳?
- angular - 如何在ngrx效果中有条件地发出http请求
- python - Gurobi 前缀和优化
- python - 如何使用 Python Discord bot cog 读取所有发送的消息?on_message 似乎不起作用
- python - 每次按下按钮时更改 QLabel 都会被覆盖
- json - 使用蛇形大小写转换的 JSON 编码会忽略 CodingKeys
- c# - ChannelReader.WaitToReadAsync时如何避免抛出InvalidOperationException?
- java - 有没有办法为 JTable 创建渐变背景?
- java - Eclipse 无法运行 Spark java 项目