Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如果元素具有具有特定id的附加属性,则更改属性的值_Xml_Xslt - Fatal编程技术网

Xml 如果元素具有具有特定id的附加属性,则更改属性的值

Xml 如果元素具有具有特定id的附加属性,则更改属性的值,xml,xslt,Xml,Xslt,首先,我将简要描述我想要做的事情:我正在与一个SysMl建模者一起创建一个活动图。使用SysML modeler完成模型之后,我可以从模型中创建一个XML文件。该XML文件应导入到不同的工具中。然而,为了更好地理解源XML代码,我想对其进行转换。在下面的XML代码中,您可以看到“edge”节点。每个“边缘”节点都指一个“目标”和“源”。但是如果你对代码不太了解,你就无法读出“源”和“目标”所指的元素(你只能看到一行中的一些字母和数字)。 如果你进一步看,你会发现字母和行是指“真实”的名字,比如“

首先,我将简要描述我想要做的事情:我正在与一个SysMl建模者一起创建一个活动图。使用SysML modeler完成模型之后,我可以从模型中创建一个XML文件。该XML文件应导入到不同的工具中。然而,为了更好地理解源XML代码,我想对其进行转换。在下面的XML代码中,您可以看到“edge”节点。每个“边缘”节点都指一个“目标”和“源”。但是如果你对代码不太了解,你就无法读出“源”和“目标”所指的元素(你只能看到一行中的一些字母和数字)。 如果你进一步看,你会发现字母和行是指“真实”的名字,比如“machine1”。现在我的问题是:如何为转换编写代码,例如将“target=”abcd“转换为“target=”machine2”

我有以下XML代码:

<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>