如何将 xml 转换为请求的 xml [英] How to transform xml to requested one
本文介绍了如何将 xml 转换为请求的 xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 xml,我必须将它转换为另一种 xml 结构.我尝试了很多方法,但没有成功.我需要使用 xslt 1.0.我问了一个问题,但我问后格式改变了.
I have an xml which I must transform it to another structure of xml. I tried many ways but no success. I need to use xslt 1.0. I asked a question but the format is changed after I asked.
输入:
<?xml version="1.0" encoding="ISO-8859-1"?>
<PersonBody>
<Person>
<D>Name</D>
<D>Surname</D>
<D>Id</D>
</Person>
<PersonValues>
<D>Michael</D>
<D>Jackson</D>
<D>01</D>
</PersonValues>
<PersonValues>
<D>James</D>
<D>Bond</D>
<D>007</D>
</PersonValues>
<PersonValues>
<D>Kobe</D>
<D>Bryant</D>
<D>24</D>
</PersonValues>
</PersonBody>
所需输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<PersonBody>
<Persons>
<Person>
<Name>Michael</Name>
<Surname>Jackson</Surname>
<Id>1</Id>
</Person>
<Person>
<Name>James</Name>
<Surname>Bond</Surname>
<Id>007</Id>
</Person>
<Person>
<Name>Kobe</Name>
<Surname>Bryant</Surname>
<Id>24</Id>
</Person>
</Persons>
</PersonBody>
推荐答案
应该这样做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:key name="kColumnName" match="Person/*"
use="count(preceding-sibling::*)" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<Persons>
<xsl:apply-templates select="PersonValues" />
</Persons>
</xsl:copy>
</xsl:template>
<xsl:template match="PersonValues">
<Person>
<xsl:apply-templates select="*" />
</Person>
</xsl:template>
<xsl:template match="PersonValues/*">
<xsl:element name="{key('kColumnName', position() - 1)}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
在您的示例输入上运行时,结果是:
When run on your sample input, the result is:
<PersonBody>
<Persons>
<Person>
<Name>Michael</Name>
<Surname>Jackson</Surname>
<Id>01</Id>
</Person>
<Person>
<Name>James</Name>
<Surname>Bond</Surname>
<Id>007</Id>
</Person>
<Person>
<Name>Kobe</Name>
<Surname>Bryant</Surname>
<Id>24</Id>
</Person>
</Persons>
</PersonBody>
这篇关于如何将 xml 转换为请求的 xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文