当前位置: 首页 > 知识库问答 >
问题:

XSLT转换以排除命名空间

邓昀
2023-03-14

我是XSLT的新手,命名空间有问题。这是我必须转换的XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer">
<soapenv:Header/>
<soapenv:Body>
    <InputRequestID>?</InputRequestID>
    <InputTimeStamp>?</InputTimeStamp>
        <OrderInput>

            <Recipient>?</Recipient>

            <PortInFlag>?</PortInFlag>

            <Donor>?</Donor>

            <FMCFirstCompleteFlag>?</FMCFirstCompleteFlag>

            <CreatedOn>?</CreatedOn>

            <ACSBillingAccountIntegId>?</ACSBillingAccountIntegId>

            <OrderType>?</OrderType>

            <OrderReason>?</OrderReason>

            <CustomerFirstName>?</CustomerFirstName>

            <CustomerName>?</CustomerName>

            <AgreementNum>?</AgreementNum>

            <AgreedbyOwner>?</AgreedbyOwner>

            <OriginalReceived>?</OriginalReceived>

            <AgreementSignDate>?</AgreementSignDate>

            <BusinessContactFirstName>?</BusinessContactFirstName>

            <BusinessContactLastName>?</BusinessContactLastName>

            <UserID>?</UserID>

            <FMCMNPRequestId>?</FMCMNPRequestId>

            <LegalContactFirstName>?</LegalContactFirstName>

            <LegalContactLastName>?</LegalContactLastName>

            <CreatedBy>?</CreatedBy>

            <Comments>?</Comments>

            <IntegrationID>?</IntegrationID>

            <OrderId>?</OrderId>

            <ReferenceOrder>?</ReferenceOrder>

            <Status>?</Status>

            <OrderTypeProvisioningRelevant>?</OrderTypeProvisioningRelevant>

            <TriggerScript>?</TriggerScript>

            <OrderSource>?</OrderSource>

            <CustomerSegment>?</CustomerSegment>

            <CustomerSubsegment>?</CustomerSubsegment>

            <CustomerIdNumber>?</CustomerIdNumber>

            <CustomerIdType>?</CustomerIdType>

            <Priority>?</Priority>

            <CustomerCode>?</CustomerCode>

            <Urgent>?</Urgent>

            <SalesPersonEmail>?</SalesPersonEmail>

            <NotificationPhoneNumber>?</NotificationPhoneNumber>

            <NotificationEmail>?</NotificationEmail>

            <ASAP>?</ASAP>

            <CustomerNotificationChannel>?</CustomerNotificationChannel>

            <OrderCreatorEmail>?</OrderCreatorEmail>

            <PrevCustomerRef>?</PrevCustomerRef>

            <VIPFlag>?</VIPFlag>
        </OrderInput>
    </soapenv:Body>
</soapenv:Envelope>

我正在使用以下XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer" version="2.0">
<xsl:output method="xml" />
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://bre-sc/ServiceOrderToTechnicalOrderTransformer">
        <soapenv:Body>
            <ser:ServiceOrderToTechnicalOrderTransformerRequest>
                <xsl:copy-of select="soapenv:Envelope/soapenv:Body/OrderInput" />
            </ser:ServiceOrderToTechnicalOrderTransformerRequest>
        </soapenv:Body>
    </soapenv:Envelope>
</xsl:template>

结果是:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://bre-sc/ServiceOrderToTechnicalOrderTransformer">
<soapenv:Body>
    <ser:ServiceOrderToTechnicalOrderTransformerRequest>
        <OrderInput **xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer"**>
            <Recipient>
                ?
            </Recipient>
            <PortInFlag>
                ?
            </PortInFlag>
            <Donor>
                ?
            </Donor>
            <FMCFirstCompleteFlag>
                ?
            </FMCFirstCompleteFlag>
            <CreatedOn>
                ?
            </CreatedOn>
            <ACSBillingAccountIntegId>
                ?
            </ACSBillingAccountIntegId>
            <OrderType>
                ?
            </OrderType>
            <OrderReason>
                ?
            </OrderReason>
            <CustomerFirstName>
                ?
            </CustomerFirstName>
            <CustomerName>
                ?
            </CustomerName>
            <AgreementNum>
                ?
            </AgreementNum>
            <AgreedbyOwner>
                ?
            </AgreedbyOwner>
            <OriginalReceived>
                ?
            </OriginalReceived>
            <AgreementSignDate>
                ?
            </AgreementSignDate>
            <BusinessContactFirstName>
                ?
            </BusinessContactFirstName>
            <BusinessContactLastName>
                ?
            </BusinessContactLastName>
            <UserID>
                ?
            </UserID>
            <FMCMNPRequestId>
                ?
            </FMCMNPRequestId>
            <LegalContactFirstName>
                ?
            </LegalContactFirstName>
            <LegalContactLastName>
                ?
            </LegalContactLastName>
            <CreatedBy>
                ?
            </CreatedBy>
            <Comments>
                ?
            </Comments>
            <IntegrationID>
                ?
            </IntegrationID>
            <OrderId>
                ?
            </OrderId>
            <ReferenceOrder>
                ?
            </ReferenceOrder>
            <Status>
                ?
            </Status>
            <OrderTypeProvisioningRelevant>
                ?
            </OrderTypeProvisioningRelevant>
            <TriggerScript>
                ?
            </TriggerScript>
            <OrderSource>
                ?
            </OrderSource>
            <CustomerSegment>
                ?
            </CustomerSegment>
            <CustomerSubsegment>
                ?
            </CustomerSubsegment>
            <CustomerIdNumber>
                ?
            </CustomerIdNumber>
            <CustomerIdType>
                ?
            </CustomerIdType>
            <Priority>
                ?
            </Priority>
            <CustomerCode>
                ?
            </CustomerCode>
            <Urgent>
                ?
            </Urgent>
            <SalesPersonEmail>
                ?
            </SalesPersonEmail>
            <NotificationPhoneNumber>
                ?
            </NotificationPhoneNumber>
            <NotificationEmail>
                ?
            </NotificationEmail>
            <ASAP>
                ?
            </ASAP>
            <CustomerNotificationChannel>
                ?
            </CustomerNotificationChannel>
            <OrderCreatorEmail>
                ?
            </OrderCreatorEmail>
            <PrevCustomerRef>
                ?
            </PrevCustomerRef>
            <VIPFlag>
                ?
            </VIPFlag>
        </OrderInput>
    </ser:ServiceOrderToTechnicalOrderTransformerRequest>
</soapenv:Body>

我试图删除结果输入顺序中的名称空间,但它不适合我。有人能帮我学习XSLT吗?谢谢

共有1个答案

仲孙夕
2023-03-14

这可以通过如下对样式表进行微小更改来实现。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" />
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:ser1="http://bre-sc/ServiceOrderToTechnicalOrderTransformer"
            xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer">
            <soapenv:Body>
                <ser:ServiceOrderToTechnicalOrderTransformerRequest>
                    <xsl:copy-of select="soapenv:Envelope/soapenv:Body/OrderInput" />
                </ser:ServiceOrderToTechnicalOrderTransformerRequest>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>

我已将xmlns:ser移动到

<soapenv:Envelope
    xmlns:ser="http://www.softomat.bg/myapp/esb/ServiceOrderToTechnicalOrderTransformer"
    xmlns:ser1="http://bre-sc/ServiceOrderToTechnicalOrderTransformer"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ser:ServiceOrderToTechnicalOrderTransformerRequest>
            <OrderInput>
                <Recipient>?</Recipient>
                <PortInFlag>?</PortInFlag>
                <Donor>?</Donor>
                <FMCFirstCompleteFlag>?</FMCFirstCompleteFlag>
                <CreatedOn>?</CreatedOn>
                <ACSBillingAccountIntegId>?</ACSBillingAccountIntegId>
                <OrderType>?</OrderType>
                <OrderReason>?</OrderReason>
                <CustomerFirstName>?</CustomerFirstName>
                <CustomerName>?</CustomerName>
                <AgreementNum>?</AgreementNum>
                <AgreedbyOwner>?</AgreedbyOwner>
                <OriginalReceived>?</OriginalReceived>
                <AgreementSignDate>?</AgreementSignDate>
                <BusinessContactFirstName>?</BusinessContactFirstName>
                <BusinessContactLastName>?</BusinessContactLastName>
                <UserID>?</UserID>
                <FMCMNPRequestId>?</FMCMNPRequestId>
                <LegalContactFirstName>?</LegalContactFirstName>
                <LegalContactLastName>?</LegalContactLastName>
                <CreatedBy>?</CreatedBy>
                <Comments>?</Comments>
                <IntegrationID>?</IntegrationID>
                <OrderId>?</OrderId>
                <ReferenceOrder>?</ReferenceOrder>
                <Status>?</Status>
                <OrderTypeProvisioningRelevant>?</OrderTypeProvisioningRelevant>
                <TriggerScript>?</TriggerScript>
                <OrderSource>?</OrderSource>
                <CustomerSegment>?</CustomerSegment>
                <CustomerSubsegment>?</CustomerSubsegment>
                <CustomerIdNumber>?</CustomerIdNumber>
                <CustomerIdType>?</CustomerIdType>
                <Priority>?</Priority>
                <CustomerCode>?</CustomerCode>
                <Urgent>?</Urgent>
                <SalesPersonEmail>?</SalesPersonEmail>
                <NotificationPhoneNumber>?</NotificationPhoneNumber>
                <NotificationEmail>?</NotificationEmail>
                <ASAP>?</ASAP>
                <CustomerNotificationChannel>?</CustomerNotificationChannel>
                <OrderCreatorEmail>?</OrderCreatorEmail>
                <PrevCustomerRef>?</PrevCustomerRef>
                <VIPFlag>?</VIPFlag>
            </OrderInput>
        </ser:ServiceOrderToTechnicalOrderTransformerRequest>
    </soapenv:Body>
</soapenv:Envelope>

 类似资料:
  • 我有这个xml是架构版本3.0http://www.test.com/Service/v3。我需要将其降级到版本1http://www.test.com/Service/v1.为此,我使用XSL来转换它。 但我得到这样的结果 在我的输出XML中,我得到了这个 为什么将其添加到NS2:消息中? 它不在输入xml中。 我遗漏了一些东西。如果有人能指出这个问题,我将不胜感激。 我希望在输出中创建以下内容

  • 我试图用XSLT处理器在PHP中转换xml文档,但我无法选择任何内容。。。我认为这是一个名称空间问题。如果我从一个干净的<代码> inputxml: Xsl-file: 我无法更改输入文件,因为它是由其他程序生成的。 安德烈

  • 我需要一个简单的xslt,它接受输入并提供如下所述的输出。我已经编写了xslt,但名称空间被忽略了。你能帮我一下吗。 输入消息: 预期输出消息: 实际输出消息: XSLT:

  • 我试图将Excel xml文件的一部分呈现为超文本标记语言,以便在翻译(外语翻译)计算机辅助翻译工具中的部分内容时改进预览。 我有以下xml: 我试图从每行中提取第二个数据元素并显示它,但我根本无法显示它。我认为这与名称空间有关,我肯定遗漏了什么,但看不出是什么。这就是我正在使用的: 有人能帮我吗? 我应该补充一点,我正在使用Treebeard来测试这个,它用这些错误验证xml(我无法控制)...

  • 我正在尝试创建一个XSLT文件,我可以让它工作,而无需在任何一个文件中包含名称空间,但只要我在其中包含名称空间,它就会停止工作。以下是我正在使用的示例。 我的XML文件 我的转换文件。 我的结果 如果我将上述内容更改为此,则不会。我的新XML文件 我的新转换文件。 我现在在转换后的文件中没有数据了?如果这个问题是基本的,请原谅,我没有XSLT的经验,目前我正努力解决这个问题。

  • XSLT示例: 这里有一个名称空间xmlns:xslnsv=”http://sample2.2“当我们有一个具有相同命名空间的xml时,它就工作了 产生输出: 但问题是:我们有一些具有不同命名空间ie的XMLhttp://sample2.1具有不同命名空间的示例xml 那么我们就没有正确的输出。 我修改了xslt以动态更改名称空间。带有新更改的xslt示例 在我看来,它可以更改名称空间,但不能在更