Xslt 转换XML-形成适当的记录
我试图创建一个XSLT来转换XML文档,但在识别记录边界方面遇到了困难。下面是我的xmlXslt 转换XML-形成适当的记录,xslt,xslt-2.0,Xslt,Xslt 2.0,我试图创建一个XSLT来转换XML文档,但在识别记录边界方面遇到了困难。下面是我的xml <?xml version="1.0" encoding="UTF-8"?> <catalog> <mheader> <mid>1</mid> <mname>mn</mname> </mheader> <cheade
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<mheader>
<mid>1</mid>
<mname>mn</mname>
</mheader>
<cheader>
<cid>1</cid>
<cname>cn</cname>
</cheader>
<lheader>
<lid>1</lid>
<lname>ln</lname>
</lheader>
<aheader>
<aid>1</aid>
<aname>an</aname>
</aheader>
<pos>
<pid>1</pid>
<pname>pay</pname>
</pos>
<pos>
<pid>2</pid>
<pname>pay1</pname>
</pos>
<mheader>
<mid>2</mid>
<mname>mh1</mname>
</mheader>
<cheader>
<cid>2</cid>
<cname>ch1</cname>
</cheader>
<lheader>
<lid>2</lid>
<lname>lh1</lname>
</lheader>
<aheader>
<aid>2</aid>
<aname>ah1</aname>
</aheader>
<pos>
<pid>1</pid>
<pname>pay</pname>
</pos>
<pos>
<pid>2</pid>
<pname>pay3</pname>
</pos>
<pos>
<pid>3</pid>
<pname>pay4</pname>
</pos>
</catalog>
1.
锰
1.
cn
1.
自然对数
1.
一
1.
支付
2.
工资1
2.
mh1
2.
ch1
2.
lh1
2.
ah1
1.
支付
2.
工资3
3.
工资4
我必须像下面那样转换xml
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<record>
<mheader>
<mid>1</mid>
<mname>mn</mname>
</mheader>
<cheader>
<cid>1</cid>
<cname>cn</cname>
</cheader>
<lheader>
<lid>1</lid>
<lname>ln</lname>
</lheader>
<aheader>
<aid>1</aid>
<aname>an</aname>
</aheader>
<pos>
<pid>1</pid>
<pname>pay</pname>
</pos>
<pos>
<pid>2</pid>
<pname>pay1</pname>
</pos>
</record>
<record>
<mheader>
<mid>2</mid>
<mname>mh1</mname>
</mheader>
<cheader>
<cid>2</cid>
<cname>ch1</cname>
</cheader>
<lheader>
<lid>2</lid>
<lname>lh1</lname>
</lheader>
<aheader>
<aid>2</aid>
<aname>ah1</aname>
</aheader>
<pos>
<pid>1</pid>
<pname>pay</pname>
</pos>
<pos>
<pid>2</pid>
<pname>pay3</pname>
</pos>
<pos>
<pid>3</pid>
<pname>pay4</pname>
</pos>
</record>
</catalog>
1.
锰
1.
cn
1.
自然对数
1.
一
1.
支付
2.
工资1
2.
mh1
2.
ch1
2.
lh1
2.
ah1
1.
支付
2.
工资3
3.
工资4
理想情况下,记录应从标记mheader开始,并在最后一个POS标记结束
这就是我到现在为止一直在尝试的
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<record>
<xsl:apply-templates select="catalog/mheader"/>
<xsl:apply-templates select="catalog/cheader"/>
<xsl:apply-templates select="catalog/lheader"/>
<xsl:apply-templates select="catalog/aheader"/>
<xsl:apply-templates select="catalog/pos"/>
</record>
</xsl:template>
</xsl:stylesheet>
在这种情况下,您对如何形成正确的记录有何想法?
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="catalog">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="mheader">
<Record>
<xsl:copy-of select="current-group()"/>
</Record>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Check it.
检查一下。
带有