Мне нужен выходной файл XSL (выходной файл XML), который принимает XML-файл в качестве входных данных, в структуре папок - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть один XML-файл в качестве входных данных и один XSL-файл, который преобразует входной XML-файл в другой XML-файл.Мне нужно поместить этот выходной файл XML в определенную папку и с конкретным именем.Как я могу это сделать?Я попытался использовать result-document, но не повезло, что имя файла просто отображается в выходном файле.

вот мой XML-код (Trial.xml):

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="trail_xslt.xsl"?> 
<!DOCTYPE xml>
<Settings>
    <Setting Id="66" Revision="2" Type="e-mail settings"
        Name="E-mail setting" Default_Item="false">
        <SettingAttributes>
            <SettingAttribute Name="email push" Value="Yes" />
            <SettingAttribute Name="cost warning" Value="No" />
            <SettingAttribute Name="email account name style"
                Value="NONE" />
            <SettingAttribute
                Name="linkedin integration in e-mail" Value="No" />
            <SettingAttribute
                Name="show truncation limit in bytes" Value="Yes" />
        </SettingAttributes>
    </Setting>
</Settings>

Вот мойКод XSL (Trial.xsl):

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

    <xsl:output method="xml" encoding="UTF-8"  indent="yes" omit-xml-declaration="no" />

    <!-- Our goal is to come up with output XML in a folder structure -->
    <xsl:template match="/">
        <resources>
                    <integer name="email_account_name_style">
                        <xsl:choose>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'email account name style']/@Value = 'NONE'">
                                0
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'email account name style']/@Value = 'EMAIL'">
                                1
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'email account name style']/@Value = 'DOMAIN'">
                                2
                            </xsl:when>
                        </xsl:choose>
                    </integer>

                    <integer name="push_email">
                        <xsl:choose>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'email push']/@Value = 'Yes'">
                                1
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'email push']/@Value = 'No'">
                                0
                            </xsl:when>
                        </xsl:choose>
                    </integer>

                    <bool name="enable_cost_warning">
                        <xsl:choose>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'cost warning']/@Value = 'Yes' ">
                                true
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'cost warning']/@Value = 'No' ">
                                false
                            </xsl:when>
                        </xsl:choose>
                    </bool>

                    <bool name="enable_linked_in_connection">
                        <xsl:choose>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'linkedin integration in e-mail']/@Value = 'Yes'">
                                true
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'linkedin integration in e-mail']/@Value = 'No'">
                                false
                            </xsl:when>
                        </xsl:choose>
                    </bool>

                    <bool name="truncation_size_in_bytes">
                        <xsl:choose>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'show truncation limit in bytes']/@Value = 'Yes'">
                                true
                            </xsl:when>
                            <xsl:when
                                test="Settings/Setting[@Type = 'e-mail settings']/SettingAttributes/SettingAttribute[@Name = 'show truncation limit in bytes']/@Value = 'No'">
                                false
                            </xsl:when>
                        </xsl:choose>
                    </bool>
                    </resources>
                    </xsl:template>

</xsl:stylesheet>

Мой выходной XML-файл выглядит так (Trial.out.xml):

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <integer name="email_account_name_style">0</integer>
   <integer name="push_email">1</integer>
   <bool name="enable_cost_warning">false</bool>
   <bool name="enable_linked_in_connection">false</bool>
   <bool name="truncation_size_in_bytes">true</bool>
</resources>

Приведенный выше вывод генерируется как Trial.out.xml Но мне нужен этот вывод как con.xml в следующей структуре папок E: \ sour \ resource \ values ​​

Я пытался использовать приведенный ниже фрагмент кода в XSL, но он ничего не дает:

<xsl:variable name="filename"
        select="concat('E:\sour\resource\values\','con','.xml')" />
    <xsl:value-of select="$filename" />  <!-- Creating  -->
    <xsl:result-document href="E:\sour\resource\values\" format="xml">

Пожалуйста, помогите мне

С уважением, Lahari P

1 Ответ

0 голосов
/ 27 сентября 2018

Я не знаком с Eclipse и тем, как он использует Saxon для вывода результата XSLT-преобразования, и есть ли у него какой-либо параметр конфигурации для простой настройки имени папки и файла первичного результата, поэтому я не могу предложить какой-либо конкретный способк вашей конкретной конфигурации инструмента.Также обратите внимание, что Saxon 8.9 более 10 лет, текущая версия - 9.8.

Однако в XSLT 2.0 вы, безусловно, можете использовать xsl:result-document непосредственно внутри xsl:template match="/", например,

<xsl:template match="/">
  <xsl:result-document href="file:///E:/sour/resources/values/con.xml">
     <!-- now output results you want here with literal result elements and/or by using templates e.g. -->
     <resources>
       ...
     </resources>
  </xsl:result-document>
</xsl:template>
* 1007.* чтобы основной результат записывался в определенное место.При необходимости или желании вы, конечно, можете использовать параметры или переменные для большей гибкости, например,
<xsl:param name="file-name" select="'con.xml'"/>
<xsl:param name="folder-url" select="'file:///E:/sour/resources/values/'"/>

на верхнем уровне, а затем вместо <xsl:result-document href="file:///E:/sour/resources/values/con.xml"> вы можете использовать <xsl:result-document href="{$folder-url}{$file-name}">.

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