当前位置: 首页 > 知识库问答 >
问题:

如何使用XSLT从源xml中删除名称空间和前缀attibutes?

谭志用
2023-03-14

我有一个xml如下所示

<Publication xmlns:n1="http://www.w3.org/2001/XMLSchema-instance" n1:noNamespaceSchemaLocation="InformaKMSStructure.xsd"

我想复制所有XML,但不是XMLNS:n1=“http://www.w3.org/2001/xmlschema-instance”和n1:nonamespaceschemalocation=“informakmsstructure.xsd”

共有1个答案

段干浩荡
2023-03-14

这种转变:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="node()[not(self::*)]|@*">
  <xsl:copy/>
 </xsl:template>

 <xsl:template match=
 "@*[namespace-uri() = 'http://www.w3.org/2001/XMLSchema-instance']"/>
</xsl:stylesheet>

应用于以下XML文档时(未提供!):

<Publication
 xmlns:n1="http://www.w3.org/2001/XMLSchema-instance"
 n1:noNamespaceSchemaLocation="InformaKMSStructure.xsd">
  <a x="y">
   <b/>
  </a>

  <c/>
</Publication>

产生想要的、正确的结果:

<Publication>
   <a x="y">
      <b/>
   </a>
   <c/>
</Publication>

说明:

这遵循了通常的重写标识规则的模式,但是标识规则被两个模板替换--一个匹配任何元素,第二个匹配任何其他节点或属性。

 类似资料:
  • 问题内容: 我有一个需要打开并进行一些更改的xml文件,其中之一是删除名称空间和前缀,然后保存到另一个文件。这是xml: 我可以进行所需的其他更改,但是找不到如何删除名称空间和前缀的方法。这是我需要的reusklt xml: 这是我的脚本,它将打开并解析xml并将其保存: 那么,如何在脚本中添加代码以删除名称空间和前缀呢? 问题答案: 按照Uku Loskit的建议替换标签。除此之外,请使用lxm

  • 2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素

  • 问题内容: 我有一个使用默认名称空间打印的文件。元素以ns2前缀打印,我需要将其删除,以及与我的代码的关系: 我希望它是: 这就是我的编码方式,据我所知,这足以使ns2消失: 生成的package-info结果如下: 我创建如下文件: generateClassesPackage是其中package-info.java及其元素所在的包。 Foo对象已定义,并具有以下元素: 我错过了吗?还是我误解了

  • 我有以下xml。 我想要的是 我想做的是只使用名称空间xmlns:i=”获取节点GetPatientTreatmentTeamResult下的文本(该节点在不同的调用中会有所不同)http://www.w3.org/2001/XMLSchema-instance(所有调用都有这个)并且不使用实际的节点名。 我尝试过使用XmlParser和XmlSlurper 但我一直没能得到我想要的结果。 我该怎

  • 我有从一个模式创建的JAXB对象。在封送过程中,使用NS2对xml元素进行注释。对于这个问题,我已经尝试了网络上存在的所有选项,但没有一个可行。我不能修改我的模式或更改package-info.java。请帮忙

  • 问题内容: 我有一个joomla mysql数据库,其所有表名上的表名前缀均为“ jos_”。但我想将其从所有表格中删除。我知道如何一次重命名每个表,但是我有600个表。是否有运行SQL查询的简便方法来执行此操作。 如果有人有解决方案,请您发布我可以使用的确切SQL查询? 问题答案: 您可以通过单个查询生成必要的语句: 将查询的输出保存到文件中,您便拥有了所需的所有语句。 或者,如果返回的是s和s

  • 问题内容: 我已经导入了WSDL并使用它发送SOAP请求。看起来像这样: 问题出在Calculate元素中。Web服务无法接受。Web服务不喜欢这样的名称空间… 使用SoapUI,我发现此请求可以正常工作: 那么,如何将请求从第一个版本更改为第二个版本?(不使用肮脏的把戏!) (如果会导致正确的请求格式,则重新导入不是问题。) 再说一遍:不允许使用任何肮脏的技巧,例如入侵请求流以对其进行修改! 尽

  • 我正在开发一个客户端来使用 Web 服务,但由于某种原因,除非所有命名空间都正确且没有任何前缀,否则我的请求没有得到正确处理。 我所有的类都是由服务提供商使用提供的XSD和WSDL创建的。 NfeDadosMsg.class 包装信息.java TConsStatServ.class package br.inf.portalfiscal.nfe; 包装信息.java 输出xml: 由于某种原因,