我这里有一个源XML文件,并希望使用XSLT对其进行转换。由于原始的XML文件非常复杂。
我尝试用Eclipse对其进行转换。这是我的XSL代码。 转换的目标是现在另一个程序可以读取结构化的XML。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<!-- Copy everything -->
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- Do some adjustments for the address -->
<xsl:template match="packagedElement">
<xsl:element name="Adresse">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- here I try to select the ownedAttribute node and select only the Name(s) however it doesn´t work out -->
<xsl:template match="//ownedAttribute[@name='quelle1']">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是我的源XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="20131001"
<uml:Model xmi:id="_UMyDIP-vEeiYTffJXPS1ig" name="Fallbeispiel1">
</packageImport>
<packagedElement xmi:type="uml:Class" xmi:id="_f7jXYP-vEeiYTffJXPS1ig" name="Produktion" classifierBehavior="_qcIkwP-wEeiYTffJXPS1ig">
<ownedAttribute xmi:type="uml:Property" xmi:id="_K8DCIP-wEeiYTffJXPS1ig" name="quelle1" type="_h4oIEP-vEeiYTffJXPS1ig"/>
</xmi:XMI>
。 。 。
我的结果应如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
-<xmi:XMI xmlns:xmi="http://www.omg.org/XMI" xmi:version="2.0">
-<Block name="Produktion">
<property name="quelle1"/>
<property name="maschine1" />
<property name="foerdereinrichtung1" />
我对ownedAttribute的目标是仅允许名称的输出。
答案 0 :(得分:0)
您提供的输入格式不正确。它还缺少一些名称空间声明。
尽管我假设输入源如下:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="20131001"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:uml="href://org.omg/UML/1.3">
<uml:Model xmi:id="_UMyDIP-vEeiYTffJXPS1ig" name="Fallbeispiel1">
<packagedElement xmi:type="uml:Class" xmi:id="_f7jXYP-vEeiYTffJXPS1ig" name="Produktion" classifierBehavior="_qcIkwP-wEeiYTffJXPS1ig">
<ownedAttribute xmi:type="uml:Property" xmi:id="_K8DCIP-wEeiYTffJXPS1ig" name="quelle1" type="_h4oIEP-vEeiYTffJXPS1ig" />
<ownedAttribute xmi:type="uml:Property" xmi:id="_K8DCIP-wEeiYTffJXPS1ig" name="maschine1" type="_h4oIEP-vEeiYTffJXPS1ig" />
</packagedElement>
</uml:Model>
并修改了xslt以获得预期的结果:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uml="href://org.omg/UML/1.3"
xmlns:xmi="http://www.omg.org/XMI" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<!-- Copy everything -->
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- Do some adjustments for the address -->
<xsl:template match="packagedElement">
<xsl:element name="Block">
<xsl:attribute name="name">
<xsl:value-of select="@name" />
</xsl:attribute>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- here I try to select the ownedAttribute node and select only the Name(s) however it doesn´t work out -->
<xsl:template match="ownedAttribute">
<xsl:element name="property">
<xsl:attribute name="name">
<xsl:value-of select="@name" />
</xsl:attribute>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="uml:Model">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
在此处查看演示:https://xsltfiddle.liberty-development.net/94rmq6y
让我知道我是否缺少某些东西,或者这不能解决您的问题。