Xml XSL循环和换行出现问题
我有一个工人记录的xml文档,我必须循环遍历xml文档并选择符合特定条件的记录。对于每个匹配,我需要在输出文件中写入一行,后跟一个换行符(最后一条记录除外,因为EOF处的空行将在下游系统中中断)。某些记录将匹配多个条件。。。这里是我遇到一些困难的地方,请在下面示例代码。。并提前感谢您的帮助 结果 史密斯(断线) 史密斯-FulltimeSMITH(线路中断) 史密斯(断线) 琼斯-全职 预期结果Xml XSL循环和换行出现问题,xml,xslt,Xml,Xslt,我有一个工人记录的xml文档,我必须循环遍历xml文档并选择符合特定条件的记录。对于每个匹配,我需要在输出文件中写入一行,后跟一个换行符(最后一条记录除外,因为EOF处的空行将在下游系统中中断)。某些记录将匹配多个条件。。。这里是我遇到一些困难的地方,请在下面示例代码。。并提前感谢您的帮助 结果 史密斯(断线) 史密斯-FulltimeSMITH(线路中断) 史密斯(断线) 琼斯-全职 预期结果 史密斯(断线) 史密斯-全职(换行) 史密斯(断线) 史密斯(断线) 琼斯-全职 提前谢谢你的建议
史密斯(断线) 史密斯-全职(换行) 史密斯(断线) 史密斯(断线) 琼斯-全职 提前谢谢你的建议 XML
-
琼斯
03211977
05011977
假的
-
史密斯
03211977
05011977
假的
-
史密斯
03211977
05011977
真的
-
史密斯
03211977
05011977
假的
-
琼斯
03211977
05011977
真的
-
琼斯
03211977
05011977
假的
XSLT
-全职
新XML
-
琼斯
03211977
05011977
假的
-
史密斯
03211977
05011977
假的
-
史密斯
03211977
05011977
真的
-
史密斯
03211977
05011977
假的
-
琼斯
03211977
05011977
真的
-
史密斯
03211977
05011977
假的
-
琼斯
03211977
05011977
假的
我认为这应该是解决问题的办法,因为每场比赛后你都需要休息一下,所以我建议你:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="Worker_Sync/Worker/Group[Field[@name='LastName']='Smith'
or
Field[@name='Fulltime']='True']">
<xsl:if test="Field[@name='Fulltime']='True'">
<xsl:value-of select="Field[@name='LastName']"/> <xsl:text> - Fulltime</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="Field[@name='LastName']='Smith'">
<xsl:value-of select="upper-case(Field[@name='LastName'])"/>
</xsl:if>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
-全职
请让我知道这是否有效。谢谢-这适用于提供的xml,但如果xml稍有变化,在我的情况下会发生变化(新的xml添加到原始帖子中)添加Jones-Fulltime记录和额外换行后..您能给出您得到的输出以及您给出的最新XML的预期结果吗?您能给出您得到的输出以及您给出的最新XML的预期结果吗?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="Worker_Sync/Worker/Group[Field[@name='LastName']='Smith'
or
Field[@name='Fulltime']='True']">
<xsl:if test="Field[@name='Fulltime']='True'">
<xsl:value-of select="Field[@name='LastName']"/> <xsl:text> - Fulltime</xsl:text>
</xsl:if>
<xsl:if test="Field[@name='LastName']='Smith'">
<xsl:value-of select="upper-case(Field[@name='LastName'])"/>
</xsl:if>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Jones</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">False</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Smith</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">False</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Smith</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">True</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Smith</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">False</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Jones</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">True</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Smith</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">False</Field>
</Group>
</Worker>
<Worker>
- <Group name="Employee Changes">
<Field name="LastName">Jones</Field>
<Field name="OriginalHireDt">03211977</Field>
<Field name="ParticipationDt">05011977</Field>
<Field name="Fulltime">False</Field>
</Group>
</Worker>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each select="Worker_Sync/Worker/Group[Field[@name='LastName']='Smith'
or
Field[@name='Fulltime']='True']">
<xsl:if test="Field[@name='Fulltime']='True'">
<xsl:value-of select="Field[@name='LastName']"/> <xsl:text> - Fulltime</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:if>
<xsl:if test="Field[@name='LastName']='Smith'">
<xsl:value-of select="upper-case(Field[@name='LastName'])"/>
</xsl:if>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>