使用 XSLT 反转 XML 数据标签?

发布于 2024-10-30 20:07:10 字数 735 浏览 0 评论 0原文

例如,在下面的 XML 文件中:

<person>
    <name>John</name>
    <id>1</id>

    <name>Diane</name>
    <id>2</id>

    <name>Chris</name>
    <id>3</id>
</person>

在 XSLT 中,我编码:

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

因此在 HTML 文件中它会呈现

约翰1黛安2克里斯3

但, 我需要以下输出: Diane2John1Chris3

我需要颠倒前 2 个数据标签的顺序。 下面是前 2 个标签,

<name>John</name>
<id>1</id>

<name>Diane</name>
<id>2</id>

大家有什么想法吗?

For example, in the below XML file:

<person>
    <name>John</name>
    <id>1</id>

    <name>Diane</name>
    <id>2</id>

    <name>Chris</name>
    <id>3</id>
</person>

In XSLT I code:

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

So that in the HTML file It renders

John1Diane2Chris3

.

But,
I need following output:
Diane2John1Chris3

I need to reverse order of first 2 data tags.
Here below first 2 tags

<name>John</name>
<id>1</id>

<name>Diane</name>
<id>2</id>

Any Idea folks ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱,才寂寞 2024-11-06 20:07:10
<xsl:template match="person">
  <xsl:apply-templates select="reverse(*)"/>
</xsl:template>

嗯,抱歉,这是为了完全扭转它们,我看得出来你并不是真的想扭转一切。

在这种情况下,最简单的方法是在 ` select 属性中手动编码顺序:(

<xsl:template match="person">
  <xsl:apply-templates select="name[2]"/>
  <xsl:apply-templates select="id[2]"/>
  <xsl:apply-templates select="name[1]"/>
  <xsl:apply-templates select="id[1]"/>
   ...
</xsl:template>

顺便说一句,这不是一个很好的存储数据的格式,您应该将每个人包装在 < person> 标签,因为只是一个接一个地写它们,然后摆弄顺序,就会发生意外。)

<xsl:template match="person">
  <xsl:apply-templates select="reverse(*)"/>
</xsl:template>

Erm, sorry, this is for reversing them completely, I can see you don't really want to reverse everything.

In that case the easiest way is to just hand-code the order in the ` select attribute:

<xsl:template match="person">
  <xsl:apply-templates select="name[2]"/>
  <xsl:apply-templates select="id[2]"/>
  <xsl:apply-templates select="name[1]"/>
  <xsl:apply-templates select="id[1]"/>
   ...
</xsl:template>

(By the way, this isn't a very good format to store your data, you should wrap each person in a <person> tag, as just writing them one after the other and then fiddling with the order is an accident waiting to happen.)

我要还你自由 2024-11-06 20:07:10

如果您总是只需要交换前 2 个人,那么您可以这样做:

<xsl:template match="person">
 <xsl:apply-templates select="name[position()=2]" />
 <xsl:apply-templates select="id[position()=2]" />

 <xsl:apply-templates select="name[position()=1]" />
 <xsl:apply-templates select="id[position()=1]" />

 <xsl:apply-templates select="node()[position() > 4]" />
</xsl:template>

如果您为每个“name”和“name”都有单独的 元素,这会更容易。 “id”对。

If you always just need to swap the first 2 people then you can do this:

<xsl:template match="person">
 <xsl:apply-templates select="name[position()=2]" />
 <xsl:apply-templates select="id[position()=2]" />

 <xsl:apply-templates select="name[position()=1]" />
 <xsl:apply-templates select="id[position()=1]" />

 <xsl:apply-templates select="node()[position() > 4]" />
</xsl:template>

This would be easier if you had separate <person> elements for each "name" & "id" pair.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文