Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将XML转换为JSON并删除名称空间_Xml_Json_Xslt_Namespaces - Fatal编程技术网

使用XSLT将XML转换为JSON并删除名称空间

使用XSLT将XML转换为JSON并删除名称空间,xml,json,xslt,namespaces,Xml,Json,Xslt,Namespaces,我是XSLT新手 我必须使用XSLT将XML转换为JSON 我有以下xml: <getEndUserCriteriaListForRangeResponse xmlns="http://xxxx.xxxx.xx.com/"> <endUserCriteriaList> <ns0:endUserCriteria xmlns:ns0="http://xxxx.xxxx.xx.com"> <ns0:defaultValue>

我是XSLT新手

我必须使用XSLT将XML转换为JSON

我有以下xml:

<getEndUserCriteriaListForRangeResponse xmlns="http://xxxx.xxxx.xx.com/">
  <endUserCriteriaList>
    <ns0:endUserCriteria xmlns:ns0="http://xxxx.xxxx.xx.com">
      <ns0:defaultValue>
        <ns0:customValue>PARAMETER</ns0:customValue>
        <ns0:eucValue>PARAMETER</ns0:eucValue>
        <ns0:eucValueId>PARAMETER</ns0:eucValueId>
      </ns0:defaultValue>
      <ns0:eucId>PARAMETER</ns0:eucId>
      <ns0:label>PARAMETER</ns0:label>
      <ns0:ranges>
        <ns0:id>PARAMETER</ns0:id>
        <ns0:rangeName>PARAMETER</ns0:rangeName>
      </ns0:ranges>
      <ns0:status>PARAMETER</ns0:status>
      <ns0:unit>PARAMETER</ns0:unit>
      <ns0:values>
        <ns0:customValue>PARAMETER</ns0:customValue>
        <ns0:eucValue>PARAMETER</ns0:eucValue>
        <ns0:eucValueId>PARAMETER</ns0:eucValueId>
      </ns0:values>
      <ns0:weight>PARAMETER</ns0:weight>
    </ns0:endUserCriteria>
  </endUserCriteriaList>
</getEndUserCriteriaListForRangeResponse>
在生成的JSON中,我需要删除“ns0:”。
如何做到这一点?

这里有一个通用XSLT,它可以从源文档中删除所有名称空间:

<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()[not(self::*)]">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

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

</xsl:stylesheet>

在输入上运行时,结果是:

<getEndUserCriteriaListForRangeResponse>
  <endUserCriteriaList>
    <endUserCriteria>
      <defaultValue>
        <customValue>PARAMETER</customValue>
        <eucValue>PARAMETER</eucValue>
        <eucValueId>PARAMETER</eucValueId>
      </defaultValue>
      <eucId>PARAMETER</eucId>
      <label>PARAMETER</label>
      <ranges>
        <id>PARAMETER</id>
        <rangeName>PARAMETER</rangeName>
      </ranges>
      <status>PARAMETER</status>
      <unit>PARAMETER</unit>
      <values>
        <customValue>PARAMETER</customValue>
        <eucValue>PARAMETER</eucValue>
        <eucValueId>PARAMETER</eucValueId>
      </values>
      <weight>PARAMETER</weight>
    </endUserCriteria>
  </endUserCriteriaList>
</getEndUserCriteriaListForRangeResponse>

参数
参数
参数
参数
参数
参数
参数
参数
参数
参数
参数
参数
参数

我假设在您的流程管道中有一个步骤可以将其转换为您正在寻找的JSON。

这是XSLT:该样式表无法生成您声称生成的输出。有一个步骤missing@stwissel您已经删除了帖子,但为了回答您的问题,
exclude result prefixes
允许禁止将XSLT的范围内命名空间声明复制到使用元素文本创建的元素的默认行为。i、 e.如果您有
,默认输出将是
,但是您可以使用
排除名称空间前缀来省略该名称空间声明。这对使用
copy of
copy
复制的节点的行为没有影响…(续)(续)。。。而且肯定不会从具有名称空间(或前缀)的节点中剥离名称空间。进一步阅读:
<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()[not(self::*)]">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

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

</xsl:stylesheet>
<getEndUserCriteriaListForRangeResponse>
  <endUserCriteriaList>
    <endUserCriteria>
      <defaultValue>
        <customValue>PARAMETER</customValue>
        <eucValue>PARAMETER</eucValue>
        <eucValueId>PARAMETER</eucValueId>
      </defaultValue>
      <eucId>PARAMETER</eucId>
      <label>PARAMETER</label>
      <ranges>
        <id>PARAMETER</id>
        <rangeName>PARAMETER</rangeName>
      </ranges>
      <status>PARAMETER</status>
      <unit>PARAMETER</unit>
      <values>
        <customValue>PARAMETER</customValue>
        <eucValue>PARAMETER</eucValue>
        <eucValueId>PARAMETER</eucValueId>
      </values>
      <weight>PARAMETER</weight>
    </endUserCriteria>
  </endUserCriteriaList>
</getEndUserCriteriaListForRangeResponse>