Xml 如果元素具有具有特定id的附加属性,则更改属性的值
首先,我将简要描述我想要做的事情:我正在与一个SysMl建模者一起创建一个活动图。使用SysML modeler完成模型之后,我可以从模型中创建一个XML文件。该XML文件应导入到不同的工具中。然而,为了更好地理解源XML代码,我想对其进行转换。在下面的XML代码中,您可以看到“edge”节点。每个“边缘”节点都指一个“目标”和“源”。但是如果你对代码不太了解,你就无法读出“源”和“目标”所指的元素(你只能看到一行中的一些字母和数字)。 如果你进一步看,你会发现字母和行是指“真实”的名字,比如“machine1”。现在我的问题是:如何为转换编写代码,例如将“target=”abcd“转换为“target=”machine2” 我有以下XML代码:Xml 如果元素具有具有特定id的附加属性,则更改属性的值,xml,xslt,Xml,Xslt,首先,我将简要描述我想要做的事情:我正在与一个SysMl建模者一起创建一个活动图。使用SysML modeler完成模型之后,我可以从模型中创建一个XML文件。该XML文件应导入到不同的工具中。然而,为了更好地理解源XML代码,我想对其进行转换。在下面的XML代码中,您可以看到“edge”节点。每个“边缘”节点都指一个“目标”和“源”。但是如果你对代码不太了解,你就无法读出“源”和“目标”所指的元素(你只能看到一行中的一些字母和数字)。 如果你进一步看,你会发现字母和行是指“真实”的名字,比如“
<uml:Model xmlns:xmi="http://www.omg.org/spec/XMI/20131001"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML"
xmi:id="_x3pzQHiSEemHwJRDr6_Icw"
name="activity_diagram">
<Entity name="Activity_diagram">
<edge xmi:id="_51rDcHrnEemHwJRDr6_Icw"
target="abcd"
source="1234"/>
<edge xmi:id="_C81fcHrsEemj44S3Yi86Ww"
target="wwww"
source="abcd"/>
<edge xmi:id="_Dgu2sHrsEemj44S3Yi86Ww"
target="zuio"
source="wwww"/>
<edge xmi:id="_ECWWAHrsEemj44S3Yi86Ww"
target="yxcv"
source="zuio"/>
<node xmi:id="1234" name="machine1"/>
<node xmi:id="yxcv" name="machine5"/>
<node xmi:id="abcd" name="machine2"/>
<node xmi:id="zuio" name="machine4"/>
<node xmi:id="wwww" name="machine3"/>
</Entity>
</uml:Model>
提前感谢!使用查找节点名称-例如:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xmi="http://www.omg.org/spec/XMI/20131001">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="node-by-id" match="node" use="@xmi:id" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="edge">
<edge xmi:id="{@xmi:id}"
target="{key('node-by-id', @target)/@name}"
source="{key('node-by-id', @source)/@name}"/>
</xsl:template>
</xsl:stylesheet>