Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Xml Xpath1.0 local-name()与XSLT中的命名空间_Xml_Xslt_Xpath - Fatal编程技术网

Xml Xpath1.0 local-name()与XSLT中的命名空间

Xml Xpath1.0 local-name()与XSLT中的命名空间,xml,xslt,xpath,Xml,Xslt,Xpath,出于某种原因,当我在不使用local-name()的情况下使用正确的XPath时,我没有得到任何值 我尝试过的非工作XPath: //mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text() soapenv:Envelope/soapenv:Body/mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text() 以上两个表达式在XPath工具和XMLspy中

出于某种原因,当我在不使用
local-name()
的情况下使用正确的XPath时,我没有得到任何值

我尝试过的非工作XPath:

  • //mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text()
  • soapenv:Envelope/soapenv:Body/mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text()
  • 以上两个表达式在XPath工具和XMLspy中都给出了正确的值

    使用
    local-name()

    输入请求:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="Monsanto:ServiceReturnUpdate" xmlns:urn="urn:monsanto:uscomm:service:header">
        <soapenv:Body>
            <mon:ReturnUpdateRequest Version="?">
                <urn:Header>
                    <urn:DocumentIdentifier>1013083</urn:DocumentIdentifier>
                    <urn:DocumentDateTime>2015-06-11T17:46:11.092-03:00</urn:DocumentDateTime>
                    <urn:From>
                        <urn:PartnerName>1013083</urn:PartnerName>
                        <urn:PartnerIdentifier type="SAP_ID">1013083</urn:PartnerIdentifier>
                        <!--Zero or more repetitions:-->
                    </urn:From>
                    <!--Optional:-->
                    <urn:To>
                        <urn:PartnerName>1013083</urn:PartnerName>
                        <urn:PartnerIdentifier type="SAP_ID">0001013083</urn:PartnerIdentifier>
                        <!--Zero or more repetitions:-->
                    </urn:To>
                    <urn:DataSource>APP</urn:DataSource>
                    <!--Optional:-->
                    <urn:SoftwareVersion>?</urn:SoftwareVersion>
                </urn:Header>
            </mon:ReturnUpdateRequest>
        </soapenv:Body>
    </soapenv:Envelope>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="ServiceReturnDetail" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="/">
            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
                <soapenv:Header/>
                <soapenv:Body>
                    <urn:YSdsaUsseedRetUpdate>
                        <IIdent>
                            <!--    <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='Header']/*[local-name()='DocumentIdentifier']"/>-->
                            <xsl:value-of select="//mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text()"/>
                        </IIdent>
                        <ISrc>
                            <!--<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='Header']/*[local-name()='DocumentDateTime']"/>-->
                            <xsl:value-of select="/soapenv:Envelope/soapenv:Body/mon:ReturnUpdateRequest/urn:Header/urn:DocumentDateTime"/>
                        </ISrc>
                    </urn:YSdsaUsseedRetUpdate>
                </soapenv:Body>
            </soapenv:Envelope>
        </xsl:template>
    </xsl:stylesheet>
    
    
    1013083
    2015-06-11T17:46:11.092-03:00
    1013083
    1013083
    1013083
    0001013083
    应用程序
    ?
    
    代码片段:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="Monsanto:ServiceReturnUpdate" xmlns:urn="urn:monsanto:uscomm:service:header">
        <soapenv:Body>
            <mon:ReturnUpdateRequest Version="?">
                <urn:Header>
                    <urn:DocumentIdentifier>1013083</urn:DocumentIdentifier>
                    <urn:DocumentDateTime>2015-06-11T17:46:11.092-03:00</urn:DocumentDateTime>
                    <urn:From>
                        <urn:PartnerName>1013083</urn:PartnerName>
                        <urn:PartnerIdentifier type="SAP_ID">1013083</urn:PartnerIdentifier>
                        <!--Zero or more repetitions:-->
                    </urn:From>
                    <!--Optional:-->
                    <urn:To>
                        <urn:PartnerName>1013083</urn:PartnerName>
                        <urn:PartnerIdentifier type="SAP_ID">0001013083</urn:PartnerIdentifier>
                        <!--Zero or more repetitions:-->
                    </urn:To>
                    <urn:DataSource>APP</urn:DataSource>
                    <!--Optional:-->
                    <urn:SoftwareVersion>?</urn:SoftwareVersion>
                </urn:Header>
            </mon:ReturnUpdateRequest>
        </soapenv:Body>
    </soapenv:Envelope>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mon="ServiceReturnDetail" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="/">
            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
                <soapenv:Header/>
                <soapenv:Body>
                    <urn:YSdsaUsseedRetUpdate>
                        <IIdent>
                            <!--    <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='Header']/*[local-name()='DocumentIdentifier']"/>-->
                            <xsl:value-of select="//mon:ReturnUpdateRequest/urn:Header/urn:DocumentIdentifier/text()"/>
                        </IIdent>
                        <ISrc>
                            <!--<xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='ReturnUpdateRequest']/*[local-name()='Header']/*[local-name()='DocumentDateTime']"/>-->
                            <xsl:value-of select="/soapenv:Envelope/soapenv:Body/mon:ReturnUpdateRequest/urn:Header/urn:DocumentDateTime"/>
                        </ISrc>
                    </urn:YSdsaUsseedRetUpdate>
                </soapenv:Body>
            </soapenv:Envelope>
        </xsl:template>
    </xsl:stylesheet>
    
    
    
    我哪里做错了

    我哪里做错了

    在输入XML中,
    ReturnUpdateRequest
    位于一个名称空间中,其URI为
    “Monsanto:ServiceReturnUpdate”
    。您试图将其命名为
    mon:ReturnUpdateRequest
    ——但是您的样式表将
    mon
    前缀绑定到一个完全不同的URI:

    xmlns:mon="ServiceReturnDetail"
    
    urn
    前缀也有类似的问题

    下面是一个工作示例:

    <xsl:stylesheet version="1.0"  
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:mon="Monsanto:ServiceReturnUpdate" 
    xmlns:hdr="urn:monsanto:uscomm:service:header">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="/">
            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
                <soapenv:Header/>
                <soapenv:Body>
                    <urn:YSdsaUsseedRetUpdate>
                        <IIdent>
                            <xsl:value-of select="//mon:ReturnUpdateRequest/hdr:Header/hdr:DocumentIdentifier"/>
                        </IIdent>
                    </urn:YSdsaUsseedRetUpdate>
                </soapenv:Body>
            </soapenv:Envelope>
    </xsl:template>
    
    </xsl:stylesheet>
    
    
    

    注意:由于您希望在输出中使用相同的
    urn
    前缀,但将其绑定到不同的名称空间,因此我使用了不同的前缀来处理输入。这里重要的是URI,而不是前缀本身。

    我的打字错误。我在编辑时错过了,但是即使应用了更改,它仍然没有给出值。感谢您的解释:)感谢您的解释:)。但我有一个问题,如果名称空间是问题所在,那么它是如何在onlinexpath工具和XMLSpy中工作的呢?我不知道。它不应该起作用,而且在我的任何工具中都不起作用。。