使用XSL转换XML输入(文件)以访问输出(表)
我想使用XSL将XML输入(文件)转换为访问输出(表)。 我拥有的XML文件如下所示:使用XSL转换XML输入(文件)以访问输出(表),xml,ms-access,xslt,Xml,Ms Access,Xslt,我想使用XSL将XML输入(文件)转换为访问输出(表)。 我拥有的XML文件如下所示: <?xml version="1.0"?> <ZBE14_OEMs_ItemUpdate_IN> <Record> <Header> <HEAD>HEADOEM</HEAD> </Header> <ItemMaster>
<?xml version="1.0"?>
<ZBE14_OEMs_ItemUpdate_IN>
<Record>
<Header>
<HEAD>HEADOEM</HEAD>
</Header>
<ItemMaster>
<CONO>800</CONO>
<WHLO>CA</WHLO>
<STAT>20</STAT>
<ITNO>PNA</ITNO>
<SPE3>SPE3 A</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ B</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>123</CSNO>
<UNMS>AA</UNMS>
</ItemMaster>
<Trailer>
<TRAIL>TRAILOEM</TRAIL>
</Trailer>
</Record>
<Record>
<Header>
<HEAD>HEADOEM</HEAD>
</Header>
<ItemMaster>
<CONO>800</CONO>
<WHLO>CB</WHLO>
<STAT>20</STAT>
<ITNO>PNB</ITNO>
<SPE3>SPE3 B</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ A</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>456</CSNO>
<UNMS>BB</UNMS>
</ItemMaster>
<Trailer>
<TRAIL>TRAILOEM</TRAIL>
</Trailer>
</Record>
</ZBE14_OEMs_ItemUpdate_IN>
主机厂
800
加利福尼亚州
20
PNA
SPE3 A
N
热影响区B
巴埃亚
123
AA
特雷勒姆
主机厂
800
CB
20
PNB
SPE3 B
N
热影响区A
巴埃亚
456
BB
特雷勒姆
我感兴趣的是获取
部分中的所有数据。
我不知道怎么做,因为“Header”和“trail”标签让我很烦恼
到目前为止,我就是这么做的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ZBE14_OEMs_ItemUpdate_IN/Record/Header/HEAD/ItemMaster/">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当然,这是行不通的,我是XSL的初学者,所以如果你们能帮助我,我将不胜感激
非常感谢。您必须为每个节点定义模板规则以单独处理它们
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
不应复制ItemMaster
<xsl:template match="ItemMaster">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
其他的都应该复制
<xsl:template match="ItemMaster">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这将生成以下输出:
<import>
<row>
<CONO>800</CONO>
<WHLO>CA</WHLO>
<STAT>20</STAT>
<ITNO>PNA</ITNO>
<SPE3>SPE3 A</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ B</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>123</CSNO>
<UNMS>AA</UNMS>
</row>
<row>
<CONO>800</CONO>
<WHLO>CB</WHLO>
<STAT>20</STAT>
<ITNO>PNB</ITNO>
<SPE3>SPE3 B</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ A</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>456</CSNO>
<UNMS>BB</UNMS>
</row>
</import>
800
加利福尼亚州
20
PNA
SPE3 A
N
热影响区B
巴埃亚
123
AA
800
CB
20
PNB
SPE3 B
N
热影响区A
巴埃亚
456
BB
XSLT声明要生成XML。这是正确的吗?Access能够读取XML吗?是的,我想将XML中的数据导入Access表。但是在导入之前,我想对它们进行转换。请添加预期的结果。
<import>
<row>
<CONO>800</CONO>
<WHLO>CA</WHLO>
<STAT>20</STAT>
<ITNO>PNA</ITNO>
<SPE3>SPE3 A</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ B</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>123</CSNO>
<UNMS>AA</UNMS>
</row>
<row>
<CONO>800</CONO>
<WHLO>CB</WHLO>
<STAT>20</STAT>
<ITNO>PNB</ITNO>
<SPE3>SPE3 B</SPE3>
<FRE3>N</FRE3>
<UNNN>HAZ A</UNNN>
<HAC1/>
<HAC2/>
<ITGR>BAAEAA</ITGR>
<SPE5/>
<CSNO>456</CSNO>
<UNMS>BB</UNMS>
</row>
</import>