XML to Calc - 启动文件似乎很奇怪

时间:2014-12-22 21:07:54

标签: android xml xslt

如果这看起来非常基本,我道歉。这是我第一次转换xml文件。 Android应用程序呈现的xml文件的格式似乎与我在youtube上的教程或我正在阅读的导入LibreOffice Calc的资源中看到的不一致。以下是从我的手机通话记录中转储的数据示例:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<!--File Created By Call Logs Backup & Restore v3.45 on 22/12/2014 11:27:17-->
<?xml-stylesheet type="text/xsl" href="calls.xsl"?>
<calls count="3">
  <call number="+15555555555" duration="46" date="1401396504704" type="1" readable_date="May 29, 2014 4:48:24 PM" contact_name="(Unknown)" />
  <call number="+15555555555" duration="62" date="1401487115708" type="1" readable_date="May 30, 2014 5:58:35 PM" contact_name="ICE-In Case of Emergency" />
  <call number="+15555555555" duration="51" date="1401559219530" type="1" readable_date="May 31, 2014 2:00:19 PM" contact_name="ICE-In Case of Emergency" />
</calls>

从我所做的研究来看,要创建一个xslt转换样式表,该数据的结构必须更像这样:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<!--File Created By Call Logs Backup & Restore v3.45 on 22/12/2014 11:27:17-->
<?xml-stylesheet type="text/xsl" href="calls.xsl"?>
<calls count="3">
  <call>
    <number>+15555555555</number>
    <duration>46</duration>
    <date>1401396504704</date>
    <type>1</type>
    <readable_date>May 29, 2014 4:48:24 PM</readable_date>
    <contact_name>(Unknown)</contact_name>
  </call>
  <call>
    <number>+15555555555</number>
    <duration>62</duration>
    <date>1401487115708</date>
    <type>1</type>
    <readable_date>May 30, 2014 5:58:35 PM</readable_date>
    <contact_name>ICE-In Case of Emergency</contact_name>
  </call>
  <call>
    <number>+15555555555</number>
    <duration>51</duration>
    <date>1401559219530</date>
    <type>1</type>
    <readable_date>May 31, 2014 2:00:19 PM</readable_date>
    <contact_name>ICE-In Case of Emergency</contact_name>
  </call>
</calls>

对于使用目前的xml文件,我是否缺少一些东西?我试图获得手机应用程序的作者的支持,该应用程序创建了这个xml文件,但没有运气。我是否必须将源编辑为更合适的格式,如第二个屏幕截图?

感谢阅读。

1 个答案:

答案 0 :(得分:0)

您发布的两个XML文件都是有效且格式正确的。如果问题是哪个的格式正确,由引用的calls.xsl处理,则需要知道calls.xsl的内容。您认为以某种不寻常的格式存在的第一个 XML非常常见 - 每个call节点都有多个属性 - numberduration,{{1}在 second XML中,每个date节点包含callnumberduration等作为子节点,其值为文本。

虽然不确定这可能是用于转换的date,但我发现了这个: http://android.riteshsahu.com/wp-content/uploads/2010/04/calls.xsl
只是这个模板的相关部分:

calls.xsl

对于此模板,第一个输入XML是正确的版本。当这个calls.xsl应用于你的第一个XML时,会生成以下结果 - 例如只有一行 - 为了可读性而添加了缩进:

<xsl:for-each select="calls/call">
  <tr>
    <td>
      <xsl:if test="@type = 1">
        Incoming
      </xsl:if>
      <xsl:if test="@type = 2">
        Outgoing
      </xsl:if>
      <xsl:if test="@type = 3">
        Missed
      </xsl:if>
    </td>
    <td>
      <xsl:value-of select="@number"/>
    </td>
    <td>
      <xsl:value-of select="@contact_name"/>
    </td>
    <td>
      <xsl:value-of select="@date"/>
    <br/>
      <xsl:value-of select="@readable_date"/>
    </td>
    <td>
      <xsl:value-of select="@duration"/>
    </td>
  </tr>
</xsl:for-each>