以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请教xslt的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=14102)


--  作者:lifangde125
--  发布时间:1/28/2005 11:28:00 PM

--  请教xslt的问题
我在用xstl进行xml到xml的转换.
在xslt中,我将所有的statemachine定义成POU,然后要将operation的parameter定义成POU的interface,问题是statemachine和operation不在一个节点下,而且不是所有的operation都有parameter,我的程序如下
.....
<xsl:for-each select="Foundation.Core.Namespace.ownedElement/Model_Management_Package/statemachine">
  <POU>
     <xsl:if test="../../../Foundation.Core.Namespace.ownedElement/Foundation.Core.Class/operation/@ID">
          <interface/>
.........
在我的原xml文件中,只有一个operation有paramter
可是输出的结果是我所有的POU,都有interface,而且是重复的.
其实原因我也知道,但是我不知道怎么改,哪为高手可以帮我看看.
--  作者:菜籽
--  发布时间:1/29/2005 12:04:00 AM

--  
把原文给出来啊,那样别人帮你得时候也好帮啊,呵呵 这里告后很多啊,你早上来说不定问题已经解决了啊

--  作者:lifangde125
--  发布时间:1/30/2005 8:12:00 PM

--  
<xsl:for-each select="XMI/XMI.content/Foundation.Core.Namespace.ownedElement/Model_Management.Package/Foundation.Core.Namespace.ownedElement/Behavioral_Elements.State_Machines.StateMachine">
  <pou>
    <xsl:if test=
"../../../Foundation.Core.Class/Foundation.Core.Classifier.feature/Foundation.Core.Operation/@ID">
      <xsl:for-each select="../../../Foundation.Core.Class/Foundation.Core.Classifier.feature/Foundation.Core.Operation/Foundation.Core.BehavioralFeature.parameter/Foundation.Core.Parameter">    
         <interface/>
      </xsl:for-each>      
    </xsl:if>
  </POU>
</xsl:for-each>

Foundation.Core.Class和Model_Management.Package都在XMI/XMI.content/Foundation.Core.Namespace.ownedElement节点下.
    


--  作者:lifangde125
--  发布时间:1/30/2005 8:56:00 PM

--  
我的原程序如下,因为原程序太麻烦了,我稍作了修改,但不影响查看.

<xsl:for-each select="XMI/XMI.content/Foundation.Core.Namespace.ownedElement/Model_Management.Package/Foundation.Core.Namespace.ownedElement/Behavioral_Elements.State_Machines.StateMachine">
  <pou>
    <xsl:if test=
"../../../Foundation.Core.Class/Foundation.Core.Classifier.feature/Foundation.Core.Operation/@ID">
      <xsl:for-each select="../../../Foundation.Core.Class/Foundation.Core.Classifier.feature/Foundation.Core.Operation/Foundation.Core.BehavioralFeature.parameter/Foundation.Core.Parameter">    
         <interface/>
      </xsl:for-each>      
    </xsl:if>
  </POU>
</xsl:for-each>

Foundation.Core.Class和Model_Management.Package都在XMI/XMI.content/Foundation.Core.Namespace.ownedElement同级节点下.
我的原xml文件中有三个statemachine,分别是anlauf,Noraus,和Stempelanlage,原文中也有三个operation, 分别是anlauf(), Notaus() 和Stempelanlage(inout Stempeln, inout Druck),其中只有Stempelanlage有parameter, 但是经过上面的程序,我所有的operation都有两个interface, 一个是Stempeln, 一个是Druck.

原因其实也很清楚,因为我一直在最上面的循环中, 也就是对每一个的statemachine也就是POU, 我都要将所有的operation循环一遍,所以每一个POU都有了interface. 但是我不知道怎么改.

菜籽,你能帮我看看吗?

还有一个问题,我能对元素的attribute进行比较吗?比如说statemachine和operation的<xsl:attribute name="name">进行比较.如果可以的话,我可以在interface循环前加入name的比较,如果相等,比如都叫anlauf,再进行下面的查找.

非常感谢



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms