xml - 无法更新 XML 文档的命名空间

标签 xml xslt xsd namespaces

我有一个生成 XML 输出的程序。
具有默认命名空间的程序如下所示:

<n0:eCPR xmlns:n0="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd" 
         xmlns:prx="urn:sap.com:proxy:DV4:/1SAI/TAS1F59A417878D36573F1D:700:2013/05/24">
  <n0:contractorInfo>
   <n0:contractorName>test_user</n0:contractorName>
   <n0:contractorAddress>
    <n0:street></n0:street>
    <n0:city></n0:city>
    <n0:state/>
    <n0:zip/>
   </n0:contractorAddress>
 </n0:contractorInfo>
</n0:eCPR>

如果我删除默认命名空间,输出看起来像这样
<eCPR>
  <contractorInfo>
    <contractorName>test_user</contractorName>
    <contractorAddress>
     <street></street>
     <city></city>
     <state/>
     <zip/>
   </contractorAddress>
   <insuranceNum></insuranceNum>
   <contractorEmail></contractorEmail>
 </contractorInfo>
</eCPR>

我希望它看起来像什么
<CPR:eCPR xmlns:CPR="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd">
 <CPR:contractorInfo>
  <CPR:contractorName>test_user</CPR:contractorName>
  <CPR:contractorAddress>
   <CPR:street>999 Carrier Rd</CPR:street>
   <CPR:city>Oakland</CPR:city>
   <CPR:state>CA</CPR:state>
   <CPR:zip>94612</CPR:zip>
  </CPR:contractorAddress>
 </CPR:contractorInfo>
</CPR:eCPR>

我用来删除默认命名空间的代码是:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/|comment()|processing-instruction()">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

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

<xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
      <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>
</xsl:stylesheet>

好心帮忙

谢谢

最佳答案

鉴于您的输入没有属性(或评论或处理说明),我认为您没有理由不能简单地执行以下操作:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:CPR="http://www.dir.ca.gov/dlse/CPR-Prod-Test/CPR.xsd">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

</xsl:stylesheet>

关于xml - 无法更新 XML 文档的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897378/

相关文章:

xml - 如何使用 xsl 转换具有属性而不是标签的 xml 站点地图?

xml - 在 xml 中引用 xsd 文件

c# - 使用 DataSet 表创建 xml

java - 有哪些库可以在 Google App Engine/Java Servlet 上处理 XML

java - XPath/getChildElements 都无法在 XOM 中获取 XML 子项

java - Oracle XML XDK 需要 jar

php - 如何使用 PHP 修改位于服务器端的 XML 文件的节点值

xml - 使用 XSLT 将 XML 转换为 JSON 的问题

xml - 如何根据子元素中的新计数值对元素进行排序。 XSLT 1.0

xml - 将 XSD 转换为 TypeScript