我正在尝试运行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。
答案 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> </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
获取值。