Не могу выбрать атрибуты из XML с помощью XSLT - PullRequest
0 голосов
/ 05 марта 2019

Я генерирую XML из EA Sparx.Это будет входная информация моего преобразования, так что это XML-ввод:

 <?xml version="1.0" encoding="windows-1252"?>
<xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1">
    <xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5"/>
    <uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">
    ...
    </uml:Model>
    <xmi:Extension extender="Enterprise Architect" extenderID="6.5">
    ...
    </xmi:Extension>
</xmi:XMI>

Я создал простую Java-программу для преобразования, куда я импортирую также внешнюю библиотеку saxon9he.jar.Я думаю, что это библиотека для XSLT 2.0.Я создал этот XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1">

<xsl:output method="xml" encoding="windows-1252"  indent="yes"/>

    <xsl:template name="Base" match="/">
        <xmi:XMI xmi:version="2.1" xmlns:uml="http://schema.omg.org/spec/UML/2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1">
        <xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5"/>
            <xsl:call-template name="model"  />
            <xsl:call-template name="extension"/>
        </xmi:XMI>
    </xsl:template>

    <xsl:template name="model" match="uml:Model">
        <uml:Model>
        xmi:type= <xsl:value-of select="@xmi:type"/>
        name= <xsl:value-of select="@name"/>
        visibility=<xsl:value-of select="@visibility"/>
        </uml:Model>
    </xsl:template>

     <xsl:template name="extension" match="xmi:Extension">
         extension
     </xsl:template>
</xsl:stylesheet>

, и он создал XML-вывод:

<?xml version="1.0" encoding="windows-1252"?>
    <xmi:XMI xmlns:uml="http://schema.omg.org/spec/UML/2.1"
             xmlns:xmi="http://schema.omg.org/spec/XMI/2.1"
             xmi:version="2.1">
       <xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5"/>
       <uml:Model>
            xmi:type= 
            name= 
            visibility=
        </uml:Model>
             extension
    </xmi:XMI>

Почему выходной xml не выбирает атрибуты?Почему они пусты?Я не могу найти, где проблема с xsl: value-of select?Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 05 марта 2019

Вызов именованного шаблона не меняет текущий контекст.Вместо:

<xsl:call-template name="model"  />

try:

<xsl:apply-templates select="xmi:XMI/uml:Model"/>

В противном случае вы останетесь в контексте корневого узла /, который не имеет каких-либо атрибутов, которые вы пытаетесь использоватьretrieve.

И, конечно, шаблон, соответствующий uml:Model, не должен иметь имени.

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