如何从具有父节点和子节点的结构的 XML 文件转到只有一层的结构
How to go from XML file with a stucture having a parent node and a child node to a structure with only one level
使用 ssis 'XML task',是否有一个 XSL 可以从具有父节点和子节点的 xml 文件转到只有一个级别的 xml 文件:输入 xml 中子节点的出现次数与输出 xml 中的出现次数相同。举个例子
输入xml
<?xml version="1.0" encoding="utf-8"?>
<RL>
<RL0601a>BEAUDRY</RL0601a>
<r>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
输出xml
<?xml version="1.0" encoding="utf-8"?>
<RL>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
输入XML
<?xml version="1.0" encoding="utf-8"?>
<RL>
<RL0601a>BEAUDRY</RL0601a>
<r>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/RL">
<root>
<xsl:for-each select="r">
<xsl:copy>
<xsl:copy-of select="../RL0601a"/>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
输出XML
<?xml version='1.0' encoding='utf-8' ?>
<root>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</root>
使用 ssis 'XML task',是否有一个 XSL 可以从具有父节点和子节点的 xml 文件转到只有一个级别的 xml 文件:输入 xml 中子节点的出现次数与输出 xml 中的出现次数相同。举个例子
输入xml
<?xml version="1.0" encoding="utf-8"?>
<RL>
<RL0601a>BEAUDRY</RL0601a>
<r>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
输出xml
<?xml version="1.0" encoding="utf-8"?>
<RL>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
输入XML
<?xml version="1.0" encoding="utf-8"?>
<RL>
<RL0601a>BEAUDRY</RL0601a>
<r>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</RL>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/RL">
<root>
<xsl:for-each select="r">
<xsl:copy>
<xsl:copy-of select="../RL0601a"/>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
输出XML
<?xml version='1.0' encoding='utf-8' ?>
<root>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>61</RL0104B>
<RL0104C>2095</RL0104C>
</r>
<r>
<RL0601a>BEAUDRY</RL0601a>
<RL0104B>64</RL0104B>
<RL0104C>1090</RL0104C>
</r>
</root>