我正在进行BPMN转换并从外部文件中提取DMN(决策表)。但是根元素中的命名空间声明对我来说有点奇怪,我无法弄清楚如何使我的XSL与我的DMN文件中所需的元素匹配。
这是我引用的文件:
<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" id="definitions_0fyde0d"
name="definitions" namespace="http://camunda.org/schema/1.0/dmn">
<decision id="decision" name="DRM01">
<decisionTable id="decisionTable">
<input id="input1" label="UserText">
<inputExpression id="inputExpression1" typeRef="string">
<text/>
</inputExpression>
</input>
<output id="output1" label="Subsystem" name="" typeRef="string"/>
<rule id="row-22012340-2">
<inputEntry id="UnaryTests_1hacpom">
<text><![CDATA["signal"]]></text>
</inputEntry>
<outputEntry id="LiteralExpression_0wvuvyc">
<text><![CDATA["input"]]></text>
</outputEntry>
</rule>
<rule id="row-22012340-3">
<inputEntry id="UnaryTests_0cmpu76">
<text><![CDATA["screen"]]></text>
</inputEntry>
<outputEntry id="LiteralExpression_0hkc81e">
<text><![CDATA["output"]]></text>
</outputEntry>
</rule>
<rule id="row-22012340-4">
<inputEntry id="UnaryTests_02k6et6">
<text/>
</inputEntry>
<outputEntry id="LiteralExpression_1wwd9ka">
<text><![CDATA["not sure"]]></text>
</outputEntry>
</rule>
</decisionTable>
</decision>
我将dmn的名称空间声明添加到我的XSL中:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dmn="http://camunda.org/schema/1.0/dmn"
exclude-result-prefixes="xs bpmn bpmndi di dc xsi dmn"
version="2.0">
我已经尝试了各种选项来匹配DMN文件中的特定元素,但我要么得到所有CDATA,要么根本没有。
以下是调用DMN内容模板的行:
<xsl:apply-templates select="$docfile/*" mode="dmn"/>
当我创建一个推出匹配元素的local-name()的模板时,我可以看到该元素是匹配的。这意味着该元素没有命名空间。我使用此模板仅处理我的DMN文件中的元素:
<xsl:template match="*" mode="dmn">
<xsl:apply-templates select="descendant::dmn:rule"/>
</xsl:template>
这根本不提供任何匹配,即使我有dmn:rule的模板。当我在apply调用和模板匹配子句中删除命名空间时,我得到相同的结果。
我怀疑命名空间不正确,但我无法弄明白。