使用XSL转换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>

我想使用XSL将XML输入(文件)转换为访问输出(表)。 我拥有的XML文件如下所示:

<?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>