无法使用XSLT从xml选择属性

时间:2019-03-04 23:09:38

标签: xml xslt attributes uml xslt-2.0

我从EA Sparx生成xml。它是我的转换的输入,所以这是 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 :(得分:0)

调用命名模板不会更改当前上下文。代替:

<tr style={{backgroundColor: this.props.color}}> ...some text here...</tr>

尝试:

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

否则,您将保留在<xsl:apply-templates select="xmi:XMI/uml:Model"/> 根节点的上下文中,该根节点没有您要检索的任何属性。

然后当然匹配/的模板不需要名称。