мне нужно использовать XSLT для отображения значений из этого формата:Использование XSLT для разделения коллекции объектов и перераспределения?
<Package>
<WorkflowProcesses>
<WorkflowProcess>
<Activities>
<Activity Name="First Activity" Id="123">
</Activity>
<Activity Name="Second Activity" Id="456">
</Activity>
<Activity Name="Third Activity" Id="789">
</Activity>
</Activities>
<Transitions>
<Transition To="789" From="456" Id="ABC">
</Transition>
<Transition To="456" From="123" Id="XYZ">
</Transition>
</Transitions>
</WorkflowProcess>
</WorkflowProcesses>
</Package>
в этот формат:
<variable type="State">
<stateId type="Integer">123</stateId>
<stateName type="String">First Activity</stateName>
<previousStatesId type="String[]">
</previousStatesId>
<nextStatesId type="String[]">
<item>456</item>
</nextStatesId>
</variable>
<variable type="State">
<stateId type="Integer">456</stateId>
<stateName type="String">Second Activity</stateName>
<previousStatesId type="String[]">
<item>123</item>
</previousStatesId>
<nextStatesId type="String[]">
<item>789</item>
</nextStatesId>
</variable>
<variable type="State">
<stateId type="Integer">789</stateId>
<stateName type="String">Third Activity</stateName>
<previousStatesId type="String[]">
<item>456</item>
</previousStatesId>
<nextStatesId type="String[]">
</nextStatesId>
</variable>
Та часть, я борюсь с, чтобы получить значения из «Transitions 'и назначьте их правильной области (' nextStatesId 'и' previousStatesId '); все остальное работает как ожидалось.
До сих пор, я успешно картографирования элементы деятельности с использованием этого:
<xsl:template match="Activities">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Activity [@Name]">
<variable type="State">
<stateId type="Integer"><xsl:value-of select="@Id"/></stateId>
<stateName type="String"><xsl:value-of select="@Name"/></stateName>
</variable>
</xsl:template>
</xsl:stylesheet>
я могу использовать это, чтобы определить все элементы переходной, то я собирался сравнивать идентификатор перехода с текущую активность, но она не работает в шаблоне выше. Я предполагаю, что это потому, что шаблон не имеет видимость всего файла XML и поэтому не понимает отображение
<xsl:for-each select="Package/WorkflowProcesses/WorkflowProcess/Transitions/Transition">
<p>...do some stuff...</p>
</xsl:for-each>
Обычно, если я кодирования, я бы просто засунуть их в два списка и затем искать их. То, что я планировал сделать здесь, состояло в том, чтобы просто перебрать все переходы из каждого действия с помощью простого оператора «if» для предыдущего/следующего состояния id ... но это, похоже, терпит неудачу.
Кто-нибудь знает о другом методе достижения этого?
также отличное решение - благодаря – user1711233
Совершенная: также работает для нескольких переходов в/из того же узла, который еще лучше. – user1711233