我有一个XML文件,并且想要使用XSLT将其格式化为新的XML文件,而忽略了原始文件中的一些信息。删除某些行效果很好,但是某些表达式仍然存在问题。代码很长,这就是为什么我只在此处摘录一些原因。
Here my source XML file:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Blocks="http://www.eclipse.org/papyrus/sysml/1.4/SysML/Blocks" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/papyrus/sysml/1.4/SysML/Blocks http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks">
<uml:Model xmi:id="_fPkgIHI3EemHwJRDr6_Icw" name="Sysml_project">
<packageImport xmi:type="uml:PackageImport" xmi:id="_fbVrSnI3EemHwJRDr6_Icw">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packageImport xmi:type="uml:PackageImport" xmi:id="_fcFSIHI3EemHwJRDr6_Icw">
<importedPackage xmi:type="uml:Package" href="pathmap://SysML14_LIBRARIES/SysML-Standard-Library.uml#SysML.package_packagedElement_Libraries"/>
</packageImport>
<packagedElement xmi:type="uml:Class" xmi:id="_ja4qAHI3EemHwJRDr6_Icw"
<!-- Here I have shortened the code -->
<Blocks:Block xmi:id="_jfDYUHI3EemHwJRDr6_Icw" base_Class="_ja4qAHI3EemHwJRDr6_Icw"/>
<Blocks:Block xmi:id="_lIs2sHI3EemHwJRDr6_Icw" base_Class="_lIjswHI3EemHwJRDr6_Icw"/>
<Blocks:Block xmi:id="_xwtDkXI4EemHwJRDr6_Icw" base_Class="_xwtDkHI4EemHwJRDr6_Icw"/>
<Blocks:Block xmi:id="_SkqB0HI5EemHwJRDr6_Icw" base_Class="_SkgQ0HI5EemHwJRDr6_Icw"/>
<Blocks:Block xmi:id="_Z7qroHI5EemHwJRDr6_Icw" base_Class="_Z7g6oHI5EemHwJRDr6_Icw"/>
</xmi:XMI>
这是我的XSL表达式,最后您可以看到我能怎么做
<?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>
<!-- in the following there are the expressions how I deleted the other lines -->
<xsl:template match="lowerValue"/>
<xsl:template match="eAnnotations"/>
<xsl:template match="type"/>
<xsl:template match="profileApplication"/>
<xsl:template match="uml:Model">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
最后我要删除五行块:块 和代码顶部的信息,例如Version,schemaLocation
这可能吗?
答案 0 :(得分:1)
1。。要从XML中删除任何空节点,可以使用以下命令:
<xsl:template match="*[not(node())]" />
2。。要从XML中删除某些特定的空节点,例如Blocks:Block
,可以使用:
<xsl:template match="Blocks:Block[not(node())]" />
注意:要在上面使用,您需要在xmlns:Blocks="http://www.eclipse.org/papyrus/sysml/1.4/SysML/Blocks"
定义中添加命名空间<xsl:stylesheet>
。
3。。要删除顶部的version和schemaLocation之类的属性,请按如下所示更新模板:
<!-- Copy everything -->
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*[not(name() = 'xsi:schemaLocation') and not(name() = 'xmi:version')]"/>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>