运行与数据转换相关的Java代码时出现xsl代码问题

时间:2019-10-21 14:41:37

标签: xml xslt

我正在尝试运行Java代码,该代码与将xml转换为csv有关。 必须使用xsl文件。但是,代码中似乎存在一些问题,因为在运行Java代码时,我收到一个空的csv文件(仅存在每一列的标题)。 Java代码确实运行良好,因为我将其与一些测试数据一起使用。

所以问题出在xsl文件上。

我的xml文件如下:

 <?xml version="1.0" encoding="UTF-8"?>
    <fcd-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/fcd_file.xsd">
        <data time="0.00">
            <mobil id="1" x="23.774532" y="37.967331" angle="229.707852" type="car" speed="0.000000" pos="5.100000" lane="32041497_0" slope="0.000000"/>
            <mobil id="2" x="23.758638" y="37.971738" angle="38.291786" type="car" speed="0.000000" pos="5.100000" lane="265887574#0_0" slope="0.000000"/>
        </data>
        <data time="1.00">
            <mobil id="1" x="23.774522" y="37.967326" angle="230.554332" type="car" speed="1.000000" pos="6.100000" lane="32041497_0" slope="0.000000"/>
            <mobil id="2" x="23.758645" y="37.971745" angle="38.291786" type="car" speed="1.000000" pos="6.100000" lane="265887574#0_0" slope="0.000000"/>
        </data>
        <data time="2.00">
            <mobil id="1" x="23.774503" y="37.967316" angle="233.076683" type="car" speed="2.000000" pos="8.100000" lane="32041497_0" slope="0.000000"/>
            <mobil id="2" x="23.758660" y="37.971759" angle="38.291786" type="car" speed="2.000000" pos="8.100000" lane="265887574#0_0" slope="0.000000"/>
        </data>

在我的xsl文件中:

  <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
    <xsl:template match="/">
    x
    <xsl:for-each select="/data">
    <xsl:value-of select="/data/mobil/@x" />
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>

我想要的是在第5-7行中声明我想要属性的值:mobil礼节的x。

1 个答案:

答案 0 :(得分:1)

假设您的输入实际上像这样:

XML

<?xml version="1.0" encoding="UTF-8"?>
<fcd-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/fcd_file.xsd">
    <data time="0.00">
        <mobil id="1" x="23.774532" y="37.967331" angle="229.707852" type="car" speed="0.000000" pos="5.100000" lane="32041497_0" slope="0.000000"/>
        <mobil id="2" x="23.758638" y="37.971738" angle="38.291786" type="car" speed="0.000000" pos="5.100000" lane="265887574#0_0" slope="0.000000"/>
    </data>
    <data time="1.00">
        <mobil id="1" x="23.774522" y="37.967326" angle="230.554332" type="car" speed="1.000000" pos="6.100000" lane="32041497_0" slope="0.000000"/>
        <mobil id="2" x="23.758645" y="37.971745" angle="38.291786" type="car" speed="1.000000" pos="6.100000" lane="265887574#0_0" slope="0.000000"/>
    </data>
    <data time="2.00">
        <mobil id="1" x="23.774503" y="37.967316" angle="233.076683" type="car" speed="2.000000" pos="8.100000" lane="32041497_0" slope="0.000000"/>
        <mobil id="2" x="23.758660" y="37.971759" angle="38.291786" type="car" speed="2.000000" pos="8.100000" lane="265887574#0_0" slope="0.000000"/>
    </data>
</fcd-export>

您可以使用以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/fcd-export">
    <xsl:for-each select="data/mobil">
        <xsl:value-of select="@x"/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

获得:

结果:

23.774532
23.758638
23.774522
23.758645
23.774503
23.758660

请注意使用<xsl:for-each select="data/mobil">代替<xsl:for-each select="/data">。后者尝试选择名为data的根元素,该根元素不存在。还有<xsl:value-of select="@x"/>而不是<xsl:value-of select="/data/mobil/@x" />。您的版本(如果可行)将仅从第一个mobil获取值。