XSLT新手 - XML导入MS Access会将元素值留空

时间:2016-12-29 16:22:44

标签: xml ms-access xslt element value-of

我一直在编写一个(非常简单的)XSLT来让MS Access读取我从其他软件包中获取的这个XML文档,并且我无法获取要转移的元素的值。当我获取XML文档并应用XSLT转换时,它给了我5个字段,“EventID”,“DeviceID”,“Officer”,“Start”和“Stop”,这很棒。 EventID,Start和Stop字段成功地从XML文档中获取所有源属性,但DeviceID和Officer元素显示为空白。

这是源XML:

<?xml version="1.0" encoding="UTF-8"?>
<recording-event desiredStreamState="Routine" dvr="dvr" stop-time="2016-12-22T02:28:21Z" start-time="2016-12-22T02:20:08Z" stop-tick="1996428" start-tick="1995441" reid="00:00:12:a0:27:c0-1990499">
  <info>
    <officer id="60">Foo Bar</officer>
    <dept>9bcd1176-1c45-493f-ac27-440f1e191feb</dept>
    <vehicle>VHC2-010176</vehicle>
    <protected>0</protected>
  </info>
  <video hashType="none">
    <metadata hashCode="1b569a7dcb7f0212b574e303a4eb8031" name="tick1990499-tick1990499.mtd"/>
    <streams>
      <stream stop-tick="1996428" start-tick="1995441" num="1">
        <file hashCode="0e089f550866d3c8dd6d898516fdbb33" name="tick1995441-tick1996428-video1.mp4"/>
        <file hashCode="113fd040423905529e456985b160298b" name="tick1995441-tick1996428-video1.vtt"/>
        <file hashCode="c87cbb2e85292d3a8024cf7000473736" name="tick1995441-tick1996428-video1.json"/>
      </stream>
    </streams>
  </video>
  <etl ContentsRevision="1"/>
</recording-event>

这是我正在使用的XSLT:

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

  <xsl:template match="recording-event">
    <Info>
      <EventID><xsl:apply-templates select="@reid"/></EventID>
      <DeviceID><xsl:value-of select="vehicle"/></DeviceID>
      <Officer><xsl:value-of select="officer"/></Officer>
      <Start><xsl:apply-templates select="@start-time"/></Start>
      <Stop><xsl:apply-templates select="@stop-time"/></Stop>
    </Info>
  </xsl:template>

</xsl:stylesheet>

就是这样。我试着在这里搜索问题数据库,我认为它可能与名称空间有关,但是当我搞砸它们时没有运气。

What it looks like when I import into MS Access

我希望它返回:

EventID= 2:a0:27:c0-1990499
DeviceID= VHC2-010176
Officer= Foo Bar
Start= 2016-12-22T02:28:21Z
Stop= 2016-12-22T02:28:21Z

它目前给我的是什么:

EventID= 2:a0:27:c0-1990499
DeviceID=
Officer=
Start= 2016-12-22T02:28:21Z
Stop= 2016-12-22T02:28:21Z

1 个答案:

答案 0 :(得分:0)

您的路径已关闭以匹配XML中的元素。 Office和Vehicle都是Info元素的嵌套元素。尝试使用以下XSL,您应该获得Vehicle(DeviceID)和Officer的值:

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

<xsl:template match="recording-event">
<Info>
  <EventID><xsl:apply-templates select="@reid"/></EventID>
  <DeviceID><xsl:value-of select="info/vehicle"/></DeviceID>
  <Officer><xsl:value-of select="info/officer"/></Officer>
  <Start><xsl:apply-templates select="@start-time"/></Start>
  <Stop><xsl:apply-templates select="@stop-time"/></Stop>
</Info>
</xsl:template>