gpt4 book ai didi

html - 根据 XML 中的元素顺序指定列

转载 作者:行者123 更新时间:2023-11-27 22:45:43 25 4
gpt4 key购买 nike

我的 XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<JobListing>
<ColumnOrder>
<columnId>4</columnId>
<columnId>2</columnId>
<columnId>5</columnId>
<columnId>1</columnId>
<columnId>3</columnId>
</ColumnOrder>
<Jobs>
<Job>
<title>Java Developer</title>
<code>JAVA</code>
<openings>10</openings>
<location>USA</location>
<duration>6 months</duration>
</Job>
<Job>
<title>.NET Developer</title>
<code>DOTNET</code>
<openings>10</openings>
<location>USA</location>
<duration>6 months</duration>
</Job>
</Jobs>
</JobListing>

我有一个特定的要求,职位应该在基于 ColumnOrder 的 HTML 页面中列出。在 XML 中指定。在内部,每个 columnId映射到如下所示的列:

  • 1 -> 标题
  • 2 -> 代码
  • 3 -> 职位空缺
  • 4 -> 地点
  • 5 -> 持续时间

在这种情况下,例如,职位列表页面应按此顺序列出列 - Location, Code, Duration, Title, Openings .我期待如下所述的内容:

<tr>
loop jobs
for each columnorder
if(columnId == 1)
<td>get Title</td>
else if (columnId == 2)
<td>get Code</td>
else if (columnId == 3)
<td>get Openings</td>
else if (columnId == 4)
<td>get Location</td>
else if (columnId == 5)
<td>get Duration</td>
end if
end columnorder
end jobs
</tr>

我如何使用 XSLT 实现这一目标?

任何帮助或不同的想法/建议将不胜感激。

编辑 <Job> XML 中的元素(标题、开头、位置、持续时间、代码)不一定按相同顺序排列。事实上,在我们当前的框架中,它是按升序生成的(如代码、持续时间、位置、开口、标题)。如何在不考虑 <Job> 的元素顺序的情况下使其工作?

最佳答案

即使 Job 的子级以任何顺序混合,此转换也有效:

    <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<my:Mapping>
<id val="1">title</id>
<id val="2">code</id>
<id val="3">openings</id>
<id val="4">location</id>
<id val="5">duration</id>
</my:Mapping>

<xsl:variable name="vOrder" select="/*/ColumnOrder/*"/>

<xsl:variable name="vMap" select=
"document('')/*/my:Mapping/*"/>

<xsl:template match="Jobs">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>

<xsl:template match="Job">
<tr>
<xsl:apply-templates select="*">
<xsl:sort data-type="number" select=
"count($vOrder
[. = $vMap
[. = name(current())]/@val
]
/preceding-sibling::*
)
"/>
</xsl:apply-templates>
</tr>
</xsl:template>

<xsl:template match="Job/*">
<td><xsl:value-of select="."/></td>
</xsl:template>

<xsl:template match="ColumnOrder"/>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<JobListing>
<ColumnOrder>
<columnId>4</columnId>
<columnId>2</columnId>
<columnId>5</columnId>
<columnId>1</columnId>
<columnId>3</columnId>
</ColumnOrder>
<Jobs>
<Job>
<title>Java Developer</title>
<code>JAVA</code>
<openings>10</openings>
<location>USA</location>
<duration>6 months</duration>
</Job>
<Job>
<title>.NET Developer</title>
<code>DOTNET</code>
<openings>10</openings>
<location>USA</location>
<duration>6 months</duration>
</Job>
</Jobs>
</JobListing>

产生了想要的、正确的结果:

<table>
<tr>
<td>USA</td>
<td>JAVA</td>
<td>6 months</td>
<td>Java Developer</td>
<td>10</td>
</tr>
<tr>
<td>USA</td>
<td>DOTNET</td>
<td>6 months</td>
<td>.NET Developer</td>
<td>10</td>
</tr>
</table>

关于html - 根据 XML 中的元素顺序指定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7513514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com