XSLT转换帮助
我希望能在XSLT转换方面得到一些帮助。我似乎做得不对 以下是源xml文档的示例:XSLT转换帮助,xslt,xslt-1.0,Xslt,Xslt 1.0,我希望能在XSLT转换方面得到一些帮助。我似乎做得不对 以下是源xml文档的示例: <?xml version="1.0" encoding="UTF-8"?> <Locations> <header> <location>Location Field</location> <job_function>Job Function Field</job_function&
<?xml version="1.0" encoding="UTF-8"?>
<Locations>
<header>
<location>Location Field</location>
<job_function>Job Function Field</job_function>
<count>Count</count>
</header>
<data>
<location>2177</location>
<job_function>ADM</job_function>
<count>1</count>
</data>
<data>
<location>2177</location>
<job_function>OPS</job_function>
<count>1</count>
</data>
<data>
<location>2177</location>
<job_function>SLS</job_function>
<count>5</count>
</data>
<data>
<location>2179</location>
<job_function>ADM</job_function>
<count>1</count>
</data>
<data>
<location>2179</location>
<job_function>SEC</job_function>
<count>1</count>
</data>
</Locations>
位置字段
作业功能字段
计数
2177
行政
1.
2177
老年退休金
1.
2177
SLS
5.
2179
行政
1.
2179
秒
1.
我想将其转换为以下格式:
<Locations>
<data>
<PeopleSoftID>2177</PeopleSoftID>
<ADM>1</ADM>
<OPS>1</OPS>
<SLS>5</SLS>
<TotalCount>7</TotalCount>
</data>
<data>
<PeopleSoftID>2179</PeopleSoftID>
<ADM>1</ADM>
<SEC>1</SEC>
<TotalCount>2</TotalCount>
</data>
</Locations>
2177
1.
1.
5.
7.
2179
1.
1.
2.
因此,基本上,正如您在示例源文档中看到的,有多个元素具有相同的值。在目标文档中,源文档中的每个
元素值现在应该只有一条记录(
元素)。由于有3个
元素的值为2177,因此目标文档现在只有1个
元素包含该值。源文档中
元素的值将成为目标文档中的元素。新元素的值最终成为源文档中
元素的同级值。目标文档中的
元素是从源
元素生成的所有新元素的值之和
我希望这个解释没有把任何人搞糊涂
我对XSLT还是有点陌生,所以我很难正确理解这方面的逻辑
我也只能使用XSLT1.0。
如果我没有提供足够的信息,请告诉我,我会尽快提供更多信息
谢谢大家 阅读并分组
您现在的xsl有什么功能,您得到了什么输出?这是一个多部分的问题。这感觉更像是一个“为我写这个样式表”的问题,而不是一个“我如何解决这个特定的最小问题?”的问题。正如@Hoons所说,如果你一次发布一个问题,展示你迄今为止所做的尝试以及它所产生的效果,你将更有可能得到有用的帮助。我将在明天返回工作岗位时发布我的问题。我正在尝试使用马兹·汉森提到的明钦方法。谢谢大家。谢谢Mads,我明天会把你们的解决方案付诸实施!你的帖子是我今天第二次遇到穆钦方法。我试图利用它来解决目前的问题,但在看了你的帖子后,我遗漏了一些细节。谢谢你的帮助。你的解决方案非常有效!我不完全理解正在发生的一切,因为有一些构造我以前没有使用过,但我理解得最多。我也非常感谢你的评论。谢谢很高兴听到这个消息。键一开始可能会有点混乱,尤其是理解匹配的内容,然后了解用作查找节点的“键”的内容。肯·霍尔曼的插图和解释应该会有所帮助。此外,Jeni Tennison还有几页解释分组:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<!--Group the data elements by their location values -->
<xsl:key name="data-by-location" match="data" use="location" />
<xsl:template match="Locations">
<xsl:copy>
<!--Get a distinct list of location values,
using the Muenchian Method -->
<xsl:for-each
select="data[generate-id() =
generate-id(key('data-by-location', location)[1])]">
<xsl:copy>
<PeopleSoftID>
<xsl:value-of select="location"/>
</PeopleSoftID>
<!--For every data element matching this location... -->
<xsl:for-each select="key('data-by-location',location)">
<!--Create an element using the job_function
as the element name -->
<xsl:element name="{job_function}">
<!--The value of the count element
as the value of the generated element-->
<xsl:value-of select="count"/>
</xsl:element>
</xsl:for-each>
<TotalCount>
<!--calculate the sum of all the count element values
for this location -->
<xsl:value-of select="sum(key('data-by-location',
location)/count)"/>
</TotalCount>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>