在 xml 标头中声明添加的命名空间

Declare added namespace in xml header

提问人:vij 提问时间:4/7/2023 最后编辑:Conal Tuohyvij 更新时间:4/10/2023 访问量:72

问:

我想在头节点中移动和声明命名空间,并从子节点中删除声明。xmlns:ns2="urn:us:gov:hhs:acf:cseiwoEIWORoot

我的输入XML:

<ns1:EIWORoot xmlns:ns1="urn:us:gov:hhs:acf:eiwo">
   <ns1:DocumentFileHeader>
      <ns2:ControlNumber xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:ControlNumber>
      <ns2:StateTribeTerritoryCode xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:StateTribeTerritoryCode>
      <ns2:EINText xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:EINText>
      <ns2:CreationDate xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:CreationDate>
      <ns2:CreationTime xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:CreationTime>
      <ns1:DocumentCode>FHA</ns1:DocumentCode>
   </ns1:DocumentFileHeader>
   <ns1:EIWOBatch>
      <ns1:DocumentBatchHeader>
         <ns2:ControlNumber xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:ControlNumber>
         <ns2:StateTribeTerritoryCode xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:StateTribeTerritoryCode>
         <ns2:EINText xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:EINText>
         <ns2:CreationDate xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:CreationDate>
         <ns2:CreationTime xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:CreationTime>
         <ns1:DocumentCode></ns1:DocumentCode>
      </ns1:DocumentBatchHeader>
      <ns1:EIWO>
         <ns1:IdentifyingInfo>
            <ns1:DocumentDate></ns1:DocumentDate>
            <ns1:DocumentActionCode></ns1:DocumentActionCode>
            <ns1:CaseIdentifier></ns1:CaseIdentifier>
            <ns1:OrderIdentifier></ns1:OrderIdentifier>
            <ns1:DocumentTrackingNumber></ns1:DocumentTrackingNumber>
         </ns1:IdentifyingInfo>
         <ns1:Authority>
            <ns1:IssuingStateTribeTerritoryName></ns1:IssuingStateTribeTerritoryName>
            <ns1:IssuingTribunalName></ns1:IssuingTribunalName>
            <ns1:EmploymentPlaceName></ns1:EmploymentPlaceName>
            <ns1:GovernmentOfficialName></ns1:GovernmentOfficialName>
            <ns1:IssuingOfficialTitleText></ns1:IssuingOfficialTitleText>
            <ns1:SendEmployeeCopyIndicator></ns1:SendEmployeeCopyIndicator>
         </ns1:Authority>
         <ns1:LegalProvision>
            <ns1:PenaltyLiabilityText></ns1:PenaltyLiabilityText>
            <ns1:AntiDiscriminationText></ns1:AntiDiscriminationText>
            <ns1:PayeeWithholdingLimitsText></ns1:PayeeWithholdingLimitsText>
         </ns1:LegalProvision>
         <ns1:Person>
            <ns1:Employee>
               <ns1:PersonName></ns1:PersonName>
               <ns1:PersonSSN></ns1:PersonSSN>
               <ns1:PersonBirthDate></ns1:PersonBirthDate>
            </ns1:Employee>
            <ns1:Child>
               <ns1:PersonName>
                  <ns1:LastName></ns1:LastName>
                  <ns1:FirstName></ns1:FirstName>
               </ns1:PersonName>
               <ns1:PersonBirthDate></ns1:PersonBirthDate>
            </ns1:Child>
         </ns1:Person>
      </ns1:EIWO>
   </ns1:EIWOBatch>
   <ns1:DocumentFileTrailer>
      <ns2:ControlNumber xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:ControlNumber>
      <ns2:SentCounts xmlns:ns2="urn:us:gov:hhs:acf:cseiwo"></ns2:SentCounts>
      <ns1:DocumentCode></ns1:DocumentCode>
   </ns1:DocumentFileTrailer>
</ns1:EIWORoot>

我的XSL代码:


<xsl:stylesheet version="1.0" xmlns:ns1="urn:us:gov:hhs:acf:eiwo" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <eiwo:EIWORoot>
         <eiwo:DocumentFileHeader>
            <cseiwo:ControlNumber>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileHeader/ns2:ControlNumber"/>
            </cseiwo:ControlNumber>
            <cseiwo:EINText>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileHeader/ns2:EINText"/>
            </cseiwo:EINText>
            <cseiwo:CreationDate>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileHeader/ns2:CreationDate"/>
            </cseiwo:CreationDate>
            <cseiwo:CreationTime>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileHeader/ns2:CreationTime"/>
            </cseiwo:CreationTime>
            <xsl:for-each select="/ns1:EIWORoot/ns1:DocumentFileHeader/ns1:DocumentCode">
               <eiwo:DocumentCode>
                  <xsl:value-of select="."/>
               </eiwo:DocumentCode>
            </xsl:for-each>
         </eiwo:DocumentFileHeader>
         <eiwo:EIWOBatch>
            <eiwo:DocumentBatchHeader>
               <cseiwo:ControlNumber>
                  <xsl:value-of select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns2:ControlNumber"/>
               </cseiwo:ControlNumber>
               <cseiwo:StateTribeTerritoryCode>
                  <xsl:value-of select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns2:StateTribeTerritoryCode"/>
               </cseiwo:StateTribeTerritoryCode>
               <cseiwo:EINText>
                  <xsl:value-of select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns2:EINText"/>
               </cseiwo:EINText>
               <cseiwo:CreationDate>
                  <xsl:value-of select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns2:CreationDate"/>
               </cseiwo:CreationDate>
               <cseiwo:CreationTime>
                  <xsl:value-of select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns2:CreationTime"/>
               </cseiwo:CreationTime>
               <xsl:for-each select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:DocumentBatchHeader/ns1:DocumentCode">
                  <eiwo:DocumentCode>
                     <xsl:value-of select="."/>
                  </eiwo:DocumentCode>
               </xsl:for-each>
            </eiwo:DocumentBatchHeader>
            <xsl:for-each select="/ns1:EIWORoot/ns1:EIWOBatch/ns1:EIWO">
               <eiwo:EIWO>
                  <eiwo:IdentifyingInfo>
                     <eiwo:DocumentDate>
                        <xsl:value-of select="./ns1:IdentifyingInfo/ns1:DocumentDate"/>
                     </eiwo:DocumentDate>
                     <eiwo:DocumentActionCode>
                        <xsl:value-of select="./ns1:IdentifyingInfo/ns1:DocumentActionCode"/>
                     </eiwo:DocumentActionCode>
                     <eiwo:CaseIdentifier>
                        <xsl:value-of select="./ns1:IdentifyingInfo/ns1:CaseIdentifier"/>
                     </eiwo:CaseIdentifier>
                     <eiwo:OrderIdentifier>
                        <xsl:value-of select="./ns1:IdentifyingInfo/ns1:OrderIdentifier"/>
                     </eiwo:OrderIdentifier>
                     <eiwo:DocumentTrackingNumber>
                        <xsl:value-of select="./ns1:IdentifyingInfo/ns1:DocumentTrackingNumber"/>
                     </eiwo:DocumentTrackingNumber>
                  </eiwo:IdentifyingInfo>
                  <eiwo:Person>
                     <eiwo:Employee>
                        <eiwo:PersonName>
                           <cseiwo:LastName>
                              <xsl:value-of select="''"/>
                           </cseiwo:LastName>
                           <cseiwo:FirstName>
                              <xsl:value-of select="''"/>
                           </cseiwo:FirstName>
                        </eiwo:PersonName>
                        <eiwo:PersonSSN>
                           <xsl:value-of select="./ns1:Person/ns1:Employee/ns1:PersonSSN"/>
                        </eiwo:PersonSSN>
                     </eiwo:Employee>
                  </eiwo:Person>
               </eiwo:EIWO>
            </xsl:for-each>
            <eiwo:DocumentBatchTrailer>
               <cseiwo:ControlNumber>
                  <xsl:value-of select="''"/>
               </cseiwo:ControlNumber>
               <cseiwo:SentCounts>
                  <xsl:value-of select="''"/>
               </cseiwo:SentCounts>
               <xsl:for-each select=".">
                  <eiwo:DocumentCode>
                     <xsl:value-of select="''"/>
                  </eiwo:DocumentCode>
               </xsl:for-each>
            </eiwo:DocumentBatchTrailer>
         </eiwo:EIWOBatch>
         <eiwo:DocumentFileTrailer>
            <cseiwo:ControlNumber>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileTrailer/ns2:ControlNumber"/>
            </cseiwo:ControlNumber>
            <cseiwo:SentCounts>
               <xsl:value-of select="/ns1:EIWORoot/ns1:DocumentFileTrailer/ns2:SentCounts"/>
            </cseiwo:SentCounts>
            <xsl:for-each select="/ns1:EIWORoot/ns1:DocumentFileTrailer/ns1:DocumentCode">
               <eiwo:DocumentCode>
                  <xsl:value-of select="."/>
               </eiwo:DocumentCode>
            </xsl:for-each>
         </eiwo:DocumentFileTrailer>
      </eiwo:EIWORoot>
   </xsl:template>
</xsl:stylesheet>

预期输出:

<eiwo:EIWORoot xmlns:eiwo="urn:us:gov:hhs:acf:eiwo" xmlns:cseiwo="urn:us:gov:hhs:acf:cseiwo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:us:gov:hhs:acf:eiwo eIWO.xsd ">
   <eiwo:DocumentFileHeader>
      <cseiwo:ControlNumber></cseiwo:ControlNumber>
      <cseiwo:EINText></cseiwo:EINText>
      <cseiwo:CreationDate></cseiwo:CreationDate>
      <cseiwo:CreationTime></cseiwo:CreationTime>
      <eiwo:DocumentCode></eiwo:DocumentCode>
   </eiwo:DocumentFileHeader>
   <eiwo:EIWOBatch>
      <eiwo:DocumentBatchHeader>
         <cseiwo:ControlNumber></cseiwo:ControlNumber>
         <cseiwo:StateTribeTerritoryCode></cseiwo:StateTribeTerritoryCode>
         <cseiwo:EINText></cseiwo:EINText>
         <cseiwo:CreationDate></cseiwo:CreationDate>
         <cseiwo:CreationTime></cseiwo:CreationTime>
         <eiwo:DocumentCode></eiwo:DocumentCode>
      </eiwo:DocumentBatchHeader>
      <eiwo:EIWO>
         <eiwo:IdentifyingInfo>
            <eiwo:DocumentDate></eiwo:DocumentDate>
            <eiwo:DocumentActionCode></eiwo:DocumentActionCode>
            <eiwo:CaseIdentifier></eiwo:CaseIdentifier>
            <eiwo:OrderIdentifier></eiwo:OrderIdentifier>
            <eiwo:DocumentTrackingNumber></eiwo:DocumentTrackingNumber>
         </eiwo:IdentifyingInfo>
         <eiwo:Person>
            <eiwo:Employee>
               <eiwo:PersonName>
                  <cseiwo:LastName></cseiwo:LastName>
                  <cseiwo:FirstName></cseiwo:FirstName>
               </eiwo:PersonName>
               <eiwo:PersonSSN></eiwo:PersonSSN>
            </eiwo:Employee>
         </eiwo:Person>
      </eiwo:EIWO>
      <eiwo:DocumentBatchTrailer>
         <cseiwo:ControlNumber></cseiwo:ControlNumber>
         <cseiwo:SentCounts></cseiwo:SentCounts>
         <eiwo:DocumentCode></eiwo:DocumentCode>
      </eiwo:DocumentBatchTrailer>
   </eiwo:EIWOBatch>
   <eiwo:DocumentFileTrailer>
      <cseiwo:ControlNumber></cseiwo:ControlNumber>
      <cseiwo:SentCounts></cseiwo:SentCounts>
      <eiwo:DocumentCode></eiwo:DocumentCode>
   </eiwo:DocumentFileTrailer>
</eiwo:EIWORoot>
XML XSLT 命名空间

评论

0赞 marc_s 4/7/2023
哦,天哪 - 真是一团糟! 您需要清理 XML 才能正确阅读!没有人会为你解决所有这些烂摊子......
1赞 michael.hor257k 4/7/2023
请将您的示例减少到演示问题所需的最小值 - 请参阅:最小可重现示例。此外,请确保 XSLT 不会产生错误。
0赞 Conal Tuohy 4/7/2023
我已经编辑了您的示例,以将代码包含在由反引号分隔的“代码块”中。请花点时间编辑您的问题,看看这是如何完成的,这样你就可以在下一个问题中可读地格式化你的代码。
0赞 Conal Tuohy 4/7/2023
查看 stackoverflow.com/questions/14966266/...

答:

1赞 y.arazim 4/10/2023 #1

我认为要获得预期的输出,您需要做的就是:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:eiwo="urn:us:gov:hhs:acf:eiwo" 
xmlns:cseiwo="urn:us:gov:hhs:acf:cseiwo">

<xsl:template match="/eiwo:EIWORoot">
    <eiwo:EIWORoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:us:gov:hhs:acf:eiwo eIWO.xsd">
        <xsl:apply-templates/>
    </eiwo:EIWORoot>
</xsl:template>

<xsl:template match="eiwo:*">
    <xsl:element name="eiwo:{local-name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

<xsl:template match="cseiwo:*">
    <xsl:element name="cseiwo:{local-name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

但是我没有非常彻底地检查这一点,因为您的XML很长。

请注意,结果在语义上与输入相同。对于使用符合要求的解析器的目标应用程序,根本不需要执行此转换。