【问题标题】:XML - Attribute to Element - MS AccessXML - 元素的属性 - MS Access
【发布时间】:2021-03-17 22:02:44
【问题描述】:

我是 XML/XSLT 的新手,我正在学习将 XML 导入 Access 数据库。我在导入以下结构时遇到问题。输入 XML 如下(虚拟数据)

<Root>
<School Name = "ABC" Address = "XYZ"/>

<Students>

<Student ID = "123" Name = "John" Bdate = "1/1/2000">
<StudentData Address = "555 street" City = "Dummy" State = "FL"/>
</Student>

<Student ID = "234" Name = "Jane" Bdate = "1/2/2000">
<StudentData Address = "665 street" City = "Dummy" State = "FL"/>
</Student>

<Student ID = "456" Name = "Joshua" Bdate = "1/3/2000">
<StudentData Address = "775 street" City = "Dummy" State = "FL"/>
</Student>

</Students>
</Root>

我想要这种格式的输出 XML,这样当我将它加载到 Access 数据库时,我可以将所有 Student 和 Studentdata 详细信息放在一个表中。

<Root>
<School Name = "ABC" Address = "XYZ"/>
<Students>
<Student>
<ID>"123"</ID>
<Name>"John"</Name>
<Bdate>"1/1/2000"</Bdate>
<Address>"555 street"</Address>
<City>"Dummy"</City>
<State>"FL"</State>
</Student>

<Student>
<ID>"123"</ID>
<Name>"John"</Name>
<Bdate>"1/1/2000"</Bdate>
<Address>"555 street"</Address>
<City>"Dummy"</City>
<State>"FL"</State>
</Student>

<Student>
<ID>"123"</ID>
<Name>"John"</Name>
<Bdate>"1/1/2000"</Bdate>
<Address>"555 street"</Address>
<City>"Dummy"</City>
<State>"FL"</State>
</Student>

</Students>
</Root>

我尝试使用下面的 xsl 转换将属性转换为元素,但它没有给我想要的结果。我在一个表中获取学生详细信息,在另一个表中获取学生数据。 我需要两者都在 access 数据库中的同一个表中

<xsl:template match="*"
 <xsl:element name="{name()}">
   <xsl:for-each select="@*">
    <xsl:element name ="{name()}">
     <xsl:value-of select="."/>
    </xsl:element>
  </xsl:for-each>
  <xsl:apply-templates select="*|text()"/>
 </xsl:element>
</xsl:template>

【问题讨论】:

  • 显示为所需输出的代码不是格式良好的 XML 文档。 确切地找出结果应该是什么样子才能正确导入。然后问如何使用 XSLT 获取它。
  • 你完全正确!对不起,我没有意识到。我已更新我的帖子以更正输出 XML

标签: xml xslt attributes element


【解决方案1】:

我猜(!)你想做类似的事情:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/Root">
    <Students>
        <xsl:for-each select="Students/Student">
            <Student>
                <xsl:for-each select="@* | StudentData/@*">
                    <xsl:element name="{name()}">
                        <xsl:value-of select="."/>
                    </xsl:element>
                </xsl:for-each>
            </Student>
        </xsl:for-each>
    </Students>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,这将返回:

结果

<?xml version="1.0" encoding="UTF-8"?>
<Students>
  <Student>
    <ID>123</ID>
    <Name>John</Name>
    <Bdate>1/1/2000</Bdate>
    <Address>555 street</Address>
    <City>Dummy</City>
    <State>FL</State>
  </Student>
  <Student>
    <ID>234</ID>
    <Name>Jane</Name>
    <Bdate>1/2/2000</Bdate>
    <Address>665 street</Address>
    <City>Dummy</City>
    <State>FL</State>
  </Student>
  <Student>
    <ID>456</ID>
    <Name>Joshua</Name>
    <Bdate>1/3/2000</Bdate>
    <Address>775 street</Address>
    <City>Dummy</City>
    <State>FL</State>
  </Student>
</Students>

【讨论】:

  • 谢谢!!太棒了。我现在明白我必须创建 2 个循环才能获得所需的格式。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 2020-05-14
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多