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
XSLT:如何找到边缘的源和目标Xpath?_Xslt_Xmi_Graphml - Fatal编程技术网

XSLT:如何找到边缘的源和目标Xpath?

XSLT:如何找到边缘的源和目标Xpath?,xslt,xmi,graphml,Xslt,Xmi,Graphml,我想编写一个xslt文件以在图形文件中传输xmi文件。但是我遇到了边缘无法连接正确的源节点和目标节点的问题。我已经试了两个星期了。但我还是很困惑。请帮帮我。非常感谢 原代码为: <?xml version="1.0" encoding="UTF-8"?> <xml xmlns:xmi="#"> <element xmi:id="BasicElement-Line1" name="Line1" xmi:type="association"/> <elem

我想编写一个xslt文件以在图形文件中传输xmi文件。但是我遇到了边缘无法连接正确的源节点和目标节点的问题。我已经试了两个星期了。但我还是很困惑。请帮帮我。非常感谢

原代码为:

<?xml version="1.0" encoding="UTF-8"?>
<xml xmlns:xmi="#">
<element xmi:id="BasicElement-Line1" name="Line1" xmi:type="association"/>

<element xmi:id="BasicElement-Line2" name="Line2" xmi:type="association"/>

<element xmi:id="BasicElement-Object1" name="Object1" xmi:type="class">
    <ownedAttribute xmi:type="Property" name="input" type="BasicElement-Object2" association="BasicElement-Line1"/>
    <ownedAttribute xmi:type="Property" name="output" type="BasicElement-Object3" association="BasicElement-Line2"/>
</element>

<element xmi:id="BasicElement-Object2" name="Object2" xmi:type="class">
</element>

<element xmi:id="BasicElement-Object3" name="Object3" xmi:type="class">
</element>
</xml>

我的目标代码是:

<?xml version="1.0" encoding="UTF-8"?>
<xmi xmlns:y="##">
   <edge target="N1002D" source="N1001B" id="N10005">
      <y:PolyLineEdge>
         <y:Arrows target="none" source="none" />
      </y:PolyLineEdge>
   </edge>
   <edge target="N1002D" source="N1001B" id="N10010">
      <y:PolyLineEdge>
         <y:Arrows target="none" source="none" />
      </y:PolyLineEdge>
   </edge>
   <node id="N1001B">
      <y:NodeLabel>BasicElement-Object1</y:NodeLabel>
   </node>
   <node id="N1002D">
      <y:NodeLabel>BasicElement-Object2</y:NodeLabel>
   </node>
   <node id="N10033">
      <y:NodeLabel>BasicElement-Object3</y:NodeLabel>
   </node>
</xmi>

BasicElement-Object1
BasicElement-Object2
BasicElement-Object3

因为将来会有更多的“类”元素。因此,我使用“{generate-id()}”来定义节点id。但是当我这样做的时候,我发现边缘无法找到源节点和目标节点的路径。所以我已经做了两个星期了,对此一无所知。请帮助我,我真的很感激。

我对XMI和目标格式不是很熟悉,但这里有一些东西应该适合您的描述

资料来源:

<?xml version="1.0" encoding="UTF-8"?>
<xml xmlns:xmi="#">
    <element xmi:id="BasicElement-Line1" name="Line1" xmi:type="association">
         <ownedEnd xmi:type="Property" type="BasicElement-Object1" association="BasicElement-Line1"/>
    </element>

    <element xmi:id="BasicElement-Line2" name="Line2" xmi:type="association">
        <ownedEnd xmi:type="Property" type="BasicElement-Object1" association="BasicElement-Line2"/>
    </element>

    <element xmi:id="BasicElement-Object1" name="Object1" xmi:type="class">
        <ownedAttribute xmi:type="Property" name="input" type="BasicElement-Object2" association="BasicElement-Line1"/>
        <ownedAttribute xmi:type="Property" name="output" type="BasicElement-Object3" association="BasicElement-Line2"/>
    </element>

    <element xmi:id="BasicElement-Object2" name="Object2" xmi:type="class">
    </element>

    <element xmi:id="BasicElement-Object3" name="Object3" xmi:type="class">
    </element>
</xml>

转换为(将名称空间调整为正确的URI):


给你:

<xmi xmlns:y="##">
   <edge id="d0e3" source="d0e13" target="d0e20">
      <y:PolyLineEdge>
         <y:Arrows source="none" target="none"/>
      </y:PolyLineEdge>
   </edge>
   <edge id="d0e8" source="d0e13" target="d0e23">
      <y:PolyLineEdge>
         <y:Arrows source="none" target="none"/>
      </y:PolyLineEdge>
   </edge>
   <node id="d0e13">
       <y:NodeLabel>BasicElement-Object1</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
   <node id="d0e20">
       <y:NodeLabel>BasicElement-Object2</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
   <node id="d0e23">
       <y:NodeLabel>BasicElement-Object3</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
</xmi>

BasicElement-Object1
BasicElement-Object2
BasicElement-Object3

我觉得不清楚。您的输入和输出不是正确的XML。您是否可以发布正确的输入(带有根元素和必需的名称空间)、正确的输出以及如何实现它的解释。此外,如果您的输入中有任何东西连接了Object1和Object2,请指出。几天前,我们刚刚收到了同样的澄清请求,但没有得到回复。很抱歉,原来的代码是这样的。我想了很久了。也许是这个联系。比如:如果element/ownedd/@type=element/xmi:id,那么源代码id=xmi:id。如果element/[xmi:type=“class”]/@type=element/xmi:id,那么目标代码id=xmi:id亲爱的,XSLT代码现在可以在我的原始代码上工作了。但我发现了一个问题。当我有更多的元素(类和关联)时。关联将仅连接两个节点。但对其他人来说不是。如何改进此XSLT代码?谢谢。@user3455563请用一个有多个关联的示例更新您的问题,我会看看我能做什么。@Kathi请检查我的更新,我现在使用关联选择了正确的目标id。我敢肯定,当你进入更高级的UML图时,可能会出现更多的问题,你有没有尝试过一个具有泛化的示例?奇怪的是,它对我有效。你用的在线变压器和软件是什么?嘿,托比,它今天就可以用了!我为此感到非常高兴。我应该说很多次谢谢你。不管怎样,非常感谢。有一个愉快的周末。
<xmi xmlns:y="##">
   <edge id="d0e3" source="d0e13" target="d0e20">
      <y:PolyLineEdge>
         <y:Arrows source="none" target="none"/>
      </y:PolyLineEdge>
   </edge>
   <edge id="d0e8" source="d0e13" target="d0e23">
      <y:PolyLineEdge>
         <y:Arrows source="none" target="none"/>
      </y:PolyLineEdge>
   </edge>
   <node id="d0e13">
       <y:NodeLabel>BasicElement-Object1</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
   <node id="d0e20">
       <y:NodeLabel>BasicElement-Object2</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
   <node id="d0e23">
       <y:NodeLabel>BasicElement-Object3</y:NodeLabel>
       <y:UMLClassNode/>
   </node>
</xmi>