重命名同一 XML 文档中名单中的节点
我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person>
<C>Miller</C>
<C>John</C>
<C>Squires Circle</C>
<C>88034</C>
<C>Boulder</C>
<C>Colorado</C>
</Person>
</Rows>
</Table>
</Tables>
</Set>
</Data>
元素 person 可以出现 n 次。现在,为了正确使用该结构,我必须首先在
中重命名
标记。 我想出了这个 XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Rows">
<Rows>
<xsl:apply-templates select="Person"/>
</Rows>
</xsl:template>
<xsl:template match="Person">
<Person>
<xsl:apply-templates select="C"/>
</Person>
</xsl:template>
<xsl:template match="/Data/Set/Tables/Table/Rows/Person/C">
<xsl:variable name="nodePosition" select="position()" />
<xsl:value-of select="parent::*/parent::*/parent::*/Tablehead/C[$nodePosition]"/>
</xsl:template>
</xsl:stylesheet>
但输出始终是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person/>
</Rows>
</Table>
</Tables>
</Set>
</Data>
它看起来不错,但我的
元素始终为空。我缺少什么?
I have the following XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person>
<C>Miller</C>
<C>John</C>
<C>Squires Circle</C>
<C>88034</C>
<C>Boulder</C>
<C>Colorado</C>
</Person>
</Rows>
</Table>
</Tables>
</Set>
</Data>
The element person can occur n-times. Now to properly work with that structure I have to rename the <C>
tags first within <Person>
.
I came up with this XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Rows">
<Rows>
<xsl:apply-templates select="Person"/>
</Rows>
</xsl:template>
<xsl:template match="Person">
<Person>
<xsl:apply-templates select="C"/>
</Person>
</xsl:template>
<xsl:template match="/Data/Set/Tables/Table/Rows/Person/C">
<xsl:variable name="nodePosition" select="position()" />
<xsl:value-of select="parent::*/parent::*/parent::*/Tablehead/C[$nodePosition]"/>
</xsl:template>
</xsl:stylesheet>
But the output is always this:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Set>
<Tables>
<Table>
<Tablehead>
<C>Name</C>
<C>FirstName</C>
<C>Address</C>
<C>Zip</C>
<C>City</C>
<C>State</C>
</Tablehead>
<Rows>
<Person/>
</Rows>
</Table>
</Tables>
</Set>
</Data>
It looks fine but my <Person>
element is always empty. What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
样式表
应用于输入输出时的
以下
The following stylesheet
when applied to the input
outputs