2017-05-05 50 views
-1

我從程序接收XML並希望將「島」標記附加到頂部和底部,並將標記移動到其父標記的底部。我的XML看起來像:使用XSLT移動帶有多個名稱空間標記的XML

XML

<?xml version="1.0"?> 
<IslandPolicyPeriodMessage xmlns="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.islandpolicyperiodmessagemodel" xmlns:accountid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.account.accountidmodel" xmlns:address="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.addressmodel" xmlns:contact="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactmodel" xmlns:contactname="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactnamemodel" xmlns:coverage="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.coveragemodel" xmlns:covterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermmodel" xmlns:covtermpattern="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermpatternmodel" xmlns:form="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formmodel" xmlns:formtextdata="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formtextdatamodel" xmlns:gl7cost_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7cost_glemodel" xmlns:gl7coveragepart_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7coveragepart_glemodel" xmlns:gl7covrgpartcoverage_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7covrgpartcoverage_glemodel" xmlns:gl7exposure_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7exposure_glemodel" xmlns:gl7line_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7line_glemodel" xmlns:job="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.jobmodel" xmlns:organizationid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.organizationidmodel" xmlns:policy="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policymodel" xmlns:policyaddlinsured="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsuredmodel" xmlns:policyaddlinsureddetail="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsureddetailmodel" xmlns:policyaddress="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policyaddressmodel" xmlns:policycontactrole="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policycontactrolemodel" xmlns:policylocation="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.location.policylocationmodel" xmlns:policyperiod="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.policyperiodmodel" xmlns:policyterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policytermmodel" xmlns:producercode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.producercodemodel" xmlns:renewal="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.renewalmodel" xmlns:territorycode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.general.territorycodemodel" xmlns:userroleassignment="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.userroleassignmentmodel" xmlns:uwcompanyid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.uwcompanyidmodel"> 
<CertMail_Ext>false</CertMail_Ext> 
<DirectMail_Ext>true</DirectMail_Ext> 
<EventName>SendIssuance</EventName> 
<ImageRightDocumentType_Ext>Renewal Declarations</ImageRightDocumentType_Ext> 
<ImageRightFlowStepID_Ext>3176331764</ImageRightFlowStepID_Ext> 
<ImageRightFolderType_Ext>Print Product</ImageRightFolderType_Ext> 
<JobType>Renewal</JobType> 
<MiscData xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
<NonInferredFormCodes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 
<PolicyPeriod> 
    <policyperiod:NewlyAddedForms> 
     <Form> 
      <FormName>1</FormName> 
     </Form> 
     <Form> 
      <FormName>2</FormName> 
     </Form> 
    </policyperiod:NewlyAddedForms> 
    <Name>Test</Name> 
</PolicyPeriod> 
</IslandPolicyPeriodMessage> 

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.islandpolicyperiodmessagemodel" xmlns:accountid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.account.accountidmodel" xmlns:address="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.addressmodel" xmlns:contact="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactmodel" xmlns:contactname="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactnamemodel" xmlns:coverage="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.coveragemodel" xmlns:covterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermmodel" xmlns:covtermpattern="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermpatternmodel" xmlns:form="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formmodel" xmlns:formtextdata="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formtextdatamodel" xmlns:gl7cost_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7cost_glemodel" xmlns:gl7coveragepart_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7coveragepart_glemodel" xmlns:gl7covrgpartcoverage_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7covrgpartcoverage_glemodel" xmlns:gl7exposure_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7exposure_glemodel" xmlns:gl7line_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7line_glemodel" xmlns:job="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.jobmodel" xmlns:organizationid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.organizationidmodel" xmlns:policy="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policymodel" xmlns:policyaddlinsured="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsuredmodel" xmlns:policyaddlinsureddetail="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsureddetailmodel" xmlns:policyaddress="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policyaddressmodel" xmlns:policycontactrole="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policycontactrolemodel" xmlns:policylocation="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.location.policylocationmodel" xmlns:policyperiod="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.policyperiodmodel" xmlns:policyterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policytermmodel" xmlns:producercode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.producercodemodel" xmlns:renewal="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.renewalmodel" xmlns:territorycode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.general.territorycodemodel" xmlns:userroleassignment="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.userroleassignmentmodel" xmlns:uwcompanyid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.uwcompanyidmodel"> 

<xsl:output encoding="UTF-8" indent="yes" method="xml" /> 

<!-- this is the identity transform: it copies everything that isn't matched by a more specific template --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/i:IslandPolicyPeriodMessage"> 
    <Island> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </Island> 
</xsl:template> 

<xsl:template match="PolicyPeriod" > 
    <xsl:copy> 
     <xsl:apply-templates select="*[not(policyperiod:NewlyAddedForms)]" /> 
     <xsl:apply-templates select="policyperiod:NewlyAddedForms" /> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="UTF-8"?> 
<Island xmlns:i="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.islandpolicyperiodmessagemodel" xmlns:accountid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.account.accountidmodel" xmlns:address="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.addressmodel" xmlns:contact="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactmodel" xmlns:contactname="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.contactnamemodel" xmlns:coverage="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.coveragemodel" xmlns:covterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermmodel" xmlns:covtermpattern="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.coverage.covtermpatternmodel" xmlns:form="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formmodel" xmlns:formtextdata="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.formtextdatamodel" xmlns:gl7cost_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7cost_glemodel" xmlns:gl7coveragepart_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7coveragepart_glemodel" xmlns:gl7covrgpartcoverage_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7covrgpartcoverage_glemodel" xmlns:gl7exposure_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7exposure_glemodel" xmlns:gl7line_gle="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.line.gl7.gl7line_glemodel" xmlns:job="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.jobmodel" xmlns:organizationid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.organizationidmodel" xmlns:policy="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policymodel" xmlns:policyaddlinsured="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsuredmodel" xmlns:policyaddlinsureddetail="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policyaddlinsureddetailmodel" xmlns:policyaddress="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policyaddressmodel" xmlns:policycontactrole="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.policycontactrolemodel" xmlns:policylocation="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.location.policylocationmodel" xmlns:policyperiod="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.policyperiodmodel" xmlns:policyterm="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.policytermmodel" xmlns:producercode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.producercodemodel" xmlns:renewal="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.job.renewalmodel" xmlns:territorycode="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.general.territorycodemodel" xmlns:userroleassignment="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.userroleassignmentmodel" xmlns:uwcompanyid="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.contact.uwcompanyidmodel"> 
    <IslandPolicyPeriodMessage xmlns="http://guidewire.com/pc/gx/islandinsurance.pc.gx.exstream.policy.period.islandpolicyperiodmessagemodel"> 
    <CertMail_Ext>false</CertMail_Ext> 
    <DirectMail_Ext>true</DirectMail_Ext> 
    <EventName>SendIssuance</EventName> 
    <ImageRightDocumentType_Ext>Renewal Declarations</ImageRightDocumentType_Ext> 
    <ImageRightFlowStepID_Ext>3176331764</ImageRightFlowStepID_Ext> 
    <ImageRightFolderType_Ext>Print Product</ImageRightFolderType_Ext> 
    <JobType>Renewal</JobType> 
    <MiscData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
    <NonInferredFormCodes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
    <PolicyPeriod> 
     <policyperiod:NewlyAddedForms> 
     <Form> 
      <FormName>1</FormName> 
     </Form> 
     <Form> 
      <FormName>2</FormName> 
     </Form> 
     </policyperiod:NewlyAddedForms> 
    <Name>Test</Name> 
    </PolicyPeriod> 
</IslandPolicyPeriodMessage> 
</Island> 

我改造工程的第一部分,但 'policyperiod:NewlyAddedForms' 不是移動。它應該是'政策期間'的最後一個標記

謝謝!

回答

0

PolicyPeriod從其父代IslandPolicyPeriodMessage繼承其命名空間。因此您:

<xsl:template match="PolicyPeriod" > 

不匹配。您需要將其更改爲:

<xsl:template match="i:PolicyPeriod" > 

此外,我相信你的意思有:

<xsl:apply-templates select="*[not(self::policyperiod:NewlyAddedForms)]" /> 

代替:

<xsl:apply-templates select="*[not(policyperiod:NewlyAddedForms)]" /> 

還要注意新添加的Island根元素位於無名稱空間中,不像它的孩子IslandPolicyPeriodMessage。也許這就是通緝令的結果,但我認爲值得注意。

+0

謝謝!那'我:'知道了。當時,我整個上午都在做這件事,而這件事從來沒有發生過。真棒回答! – Steve