2012-09-20 30 views
0

好吧,所以我從未使用過XSLT,並且在線看到了一些示例。但是,我並不完全確定每個示例在節點位置,模板匹配等方面的意圖。如何使用XSLT添加HTML鏈接到XML文件

但是實質上,我有這個XML文件,Activiti工作流程中的示例流程定義:

<?xml version="1.0" encoding="UTF-8" ?> 

<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" 
    xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" 
    xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" 
    expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://alfresco.org"> 

    <process id="activitiAdhoc" name="Adhoc Activiti Process"> 

     <startEvent id="start" 
      activiti:formKey="wf:submitAdhocTask" /> 
     <sequenceFlow id='flow1' 
      sourceRef='start' 
      targetRef='adhocTask' /> 

     <userTask id="adhocTask" name="Adhoc Task" 
      activiti:formKey="wf:adhocTask"> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 
         if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate 
         if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority; 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${bpm_assignee.properties.userName}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <sequenceFlow id='flow2' 
     sourceRef='adhocTask' 
      targetRef='verifyTaskDone' /> 

     <userTask id="verifyTaskDone" name="Verify Adhoc Task Completed." 
      activiti:formKey="wf:completedAdhocTask" > 
      <documentation> 
       Verify the arbitrary task was completed. 
      </documentation> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 
         if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate 
         if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority; 

         if (wf_notifyMe) 
         { 
          var mail = actions.create("mail"); 
          mail.parameters.to = initiator.properties.email; 
          mail.parameters.subject = "Adhoc Task " + bpm_workflowDescription; 
          mail.parameters.from = bpm_assignee.properties.email; 
          mail.parameters.text = "It's done"; 
          mail.execute(bpm_package); 
         } 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${initiator.exists() ? initiator.properties.userName : 'admin'}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <sequenceFlow id='flow3' sourceRef='verifyTaskDone' 
      targetRef='theEnd' /> 

     <endEvent id="theEnd" /> 

    </process> 

    <!-- Graphical representaion of diagram --> 
    <bpmndi:BPMNDiagram id="BPMNDiagram_activitiAdhoc"> 
     <bpmndi:BPMNPlane bpmnElement="activitiAdhoc" id="BPMNPlane_activitiAdhoc"> 
     <bpmndi:BPMNShape bpmnElement="start" 
      id="BPMNShape_start"> 
      <omgdc:Bounds height="35" width="35" x="30" y="200"></omgdc:Bounds> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape bpmnElement="adhocTask" 
      id="BPMNShape_adhocTask"> 
      <omgdc:Bounds height="55" width="105" x="130" 
       y="190"></omgdc:Bounds> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape bpmnElement="verifyTaskDone" 
      id="BPMNShape_verifyTaskDone"> 
      <omgdc:Bounds height="55" width="105" x="290" 
       y="190"></omgdc:Bounds> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNShape bpmnElement="theEnd" 
      id="BPMNShape_theEnd"> 
      <omgdc:Bounds height="35" width="35" x="455" y="200"></omgdc:Bounds> 
     </bpmndi:BPMNShape> 
     <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> 
      <omgdi:waypoint x="65" y="217"></omgdi:waypoint> 
      <omgdi:waypoint x="130" y="217"></omgdi:waypoint> 
     </bpmndi:BPMNEdge> 
     <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> 
      <omgdi:waypoint x="235" y="217"></omgdi:waypoint> 
      <omgdi:waypoint x="290" y="217"></omgdi:waypoint> 
     </bpmndi:BPMNEdge> 
     <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> 
      <omgdi:waypoint x="395" y="217"></omgdi:waypoint> 
      <omgdi:waypoint x="455" y="217"></omgdi:waypoint> 
     </bpmndi:BPMNEdge> 
     </bpmndi:BPMNPlane> 
    </bpmndi:BPMNDiagram> 

</definitions> 

而且我看到,here一個例子:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
       <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/html/body/content/h2"> 
     <xsl:copy> 
       <xsl:apply-templates/> 
     </xsl:copy> 
     <p><a href="...">your new link</a></p> 
    </xsl:template> 
</xsl:stylesheet> 

而對於我目前來說,我真的不關心,我在窗體上放置鏈接,我只需要它展現出來第一。所以我只是想知道我應該從那個示例中改變到與我的XML文件中的元素匹配?

+1

您能列出您的預期輸出嗎? –

回答

1

我不確定我是否正確......這裏有一些示例,您可以如何匹配文檔的元素。但是還有一些選項,XSLT可能非常複雜:-D 您必須記住如何遍歷節點樹。

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:model="http://www.omg.org/spec/BPMN/20100524/MODEL" 
    xmlns:activiti="http://activiti.org/bpmn"> 

<!-- example match of definitions --> 
<xsl:template match="model:definitions"> 
    <!-- here you can do something --> 
    <!-- and if you want traverse the rest of the tree --> 
    <xsl:apply-templates select="*|@*"/> 
</xsl:template> 

<!-- example match of userTask --> 
<xsl:template match="model:userTask"> 
    <!-- here you can do something --> 
    <!-- and if you want traverse the rest of the tree --> 
    <xsl:apply-templates select="*|@*"/> 
</xsl:template> 

<!-- example match of an attribute --> 
<xsl:template match="@activiti:formKey"> 
    <!-- here you can do something --> 
</xsl:template> 

    <!-- this handles all not explicit mentioned nodes ... --> 
    <xsl:template match="*|@*"> 
    <!-- ... and traverse the xml tree --> 
    <xsl:apply-templates select="*|@*"/> 
    </xsl:template> 
</xsl:stylesheet> 
相關問題