Проблема кода xsl при запуске кода Java, связанная с преобразованием данных - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь запустить код 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 я хочу объявить, что мне нужны значения атрибута: x мобильного этикета.

1 Ответ

1 голос
/ 21 октября 2019

Предполагая, что ваш ввод действительно выглядит следующим образом:

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>

вы можете использовать следующую таблицу стилей:

XSLT1,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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...