Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为xslt中不存在的节点设置默认值_Xslt_Default Value - Fatal编程技术网

如何为xslt中不存在的节点设置默认值

如何为xslt中不存在的节点设置默认值,xslt,default-value,Xslt,Default Value,我在源中有以下xml元素,并希望映射到目标中的一个元素 每当源中没有节点时,我希望将其默认为字符串“None” --------------------------源XML---------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <Instructions InstructionType="Gen">Some Message</Instructions

我在源中有以下xml元素,并希望映射到目标中的一个元素

每当源中没有节点时,我希望将其默认为字符串“None”

--------------------------源XML----------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<Instructions  InstructionType="Gen">Some Message</Instructions>
<Instructions  InstructionType="Test">Some Other Message</Instructions>
<xsl:if test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions/@InstructionType = "Gen"'>
    <xsl:choose>
        <xsl:when test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"] != ""'>
            <ns0:siGen>
                <xsl:value-of select='substring(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"],1.0,199.0)'/>
            </ns0:siGen>
        </xsl:when>
        <xsl:when test="not(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = 'Gen'])">
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:when>
        <xsl:otherwise>
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:otherwise>
    </xsl:choose>
</xsl:if> 

一些信息
其他信息
---------------------------转换XSL--------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<Instructions  InstructionType="Gen">Some Message</Instructions>
<Instructions  InstructionType="Test">Some Other Message</Instructions>
<xsl:if test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions/@InstructionType = "Gen"'>
    <xsl:choose>
        <xsl:when test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"] != ""'>
            <ns0:siGen>
                <xsl:value-of select='substring(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"],1.0,199.0)'/>
            </ns0:siGen>
        </xsl:when>
        <xsl:when test="not(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = 'Gen'])">
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:when>
        <xsl:otherwise>
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:otherwise>
    </xsl:choose>
</xsl:if> 

没有一个
没有一个
---------------------------------------------发行-------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<Instructions  InstructionType="Gen">Some Message</Instructions>
<Instructions  InstructionType="Test">Some Other Message</Instructions>
<xsl:if test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions/@InstructionType = "Gen"'>
    <xsl:choose>
        <xsl:when test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"] != ""'>
            <ns0:siGen>
                <xsl:value-of select='substring(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = "Gen"],1.0,199.0)'/>
            </ns0:siGen>
        </xsl:when>
        <xsl:when test="not(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = 'Gen'])">
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:when>
        <xsl:otherwise>
            <ns0:siGen>
                <xsl:text disable-output-escaping="no">None</xsl:text>
            </ns0:siGen>
        </xsl:otherwise>
    </xsl:choose>
</xsl:if> 
当源xml根本没有如下所示(注释)的节点时,我不能将值“None”默认为目标元素“ns0:siGen”


其他信息

我不明白为什么以下情况不起作用:

<xsl:when test="not(/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = 'Gen'])">

请告知

谢谢


Yogi

XSLT示例中的第一行说

<xsl:if   
     test='/ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions/@InstructionType = "Gen"'>

i、 e.您正在测试是否有指令元素的指令类型等于“Gen”。因此,显然,如果您对这个指令元素进行注释,该语句将为false,因此将不会执行语句中的xsl:choose

为了简化事情,考虑将<强>指令<强>元素放在变量

<xsl:variable name="gen" 
              select="ns1:OrderResponse/ns1:OrderResponseBody/ns1:OrderResponseProperties/ns1:Instructions[@InstructionType = 'Gen']" />

然后您可以使用一个简单的xsl:choose来测试它

 <ns0:siGen>
    <xsl:choose>
       <xsl:when test="$gen != ''"><xsl:value-of select="$gen" /></xsl:when>
       <xsl:otherwise>None</xsl:otherwise>
    </xsl:choose>
 <ns0:siGen>

没有一个

源xml显示的是
指令
但xslt检查的是
SpecialInstructions[@InstructionType='Gen'])
这是一个输入错误吗?是的,这是一个输入错误,我刚刚更正了它