使用不熟悉的命名空间声明匹配XML文件中的元素

时间:2017-09-30 10:23:33

标签: xslt namespaces bpmn

我正在进行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调用和模板匹配子句中删除命名空间时,我得到相同的结果。

我怀疑命名空间不正确,但我无法弄明白。

0 个答案:

没有答案