如何在xslt中将XML元素转换为不同的名称空间?



我有一个输入xml

<Request xmlns="http://hgkg.ghg.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <AppointmentInfo xmlns="">
      <AppointmentId/>
      <CountryCode>US</CountryCode>
      <Division>A</Division>
    </AppointmentInfo>
  <AppointDate xmlns="">
   <Day>Monday</Day>
    <Date>April 2</Date>
  <AppointDate>
</Request>

我需要这样的输出

<Request xmlns="http://hgkg.ghg.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <AppointmentInfo>
      <AppointmentId/>
      <CountryCode>US</CountryCode>
      <Division>A</Division>
    </AppointmentInfo>
    <AppointDate>
       <Day>Monday</Day>
        <Date>April 2</Date>
      <AppointDate>
</Request>

我只是想删除xmlns="在其中,并假设响应任命信息和任命日期在hgkg命名空间。我想转换成它。

基于JLRishe之前的回答,您可以尝试这样做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="*/*">
    <xsl:element name="{name()}" namespace="{namespace-uri(/*)}">
      <xsl:apply-templates select="@* | node()"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

这意味着,每个不是最外层元素(match="*/*")的元素被复制到具有相同名称的输出元素,但具有最外层元素(namespace-uri(/*))的名称空间。

相关内容

  • 没有找到相关文章

最新更新