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

XSLt空白命名空间

乐正焕
2023-03-14

我有xml我想像复制一样(检查xmlns=“”和标签。我想像创建。

总的计算是小心的。只有这一期。它是有效的。客户仍然希望预期的格式是这样的。非常感谢您的任何帮助。三项任务

1)我需要添加命名空间雇员xmnls=“1.2”xmlns:xsi=“3”xsi:schemalocation=“4”>2)在输出中生成这样的标记xml而不是3)需要避免xmlns=“

任何事先的帮助都非常感谢rameshkumar singh

input.xml

    <Employees>
            <employee>
             <dept>1</dept>
              <sec></sec>
            </employee>
            <employee>
               <dept>2</dept>
              <sec></sec>
            </employee>
    </Employees>

Expected.XML

         <Employees xmnls="1.2" xmlns:xsi="3" xsi:schemalocation="4">
            <totalemp>2</totalemp>
           <employee>
              <dept>1</dept>
              <sec></sec>
            <employee>
              <employee>
                   <dept>2</dept>
                    <sec></sec>
                 <employee>
              </Employees>


actual.XML
               <Employees>
                    <totalemp>2</totalemp>
                        <employee xmlns="">
                        <dept>1</dept>
                          <sec/>
                        </employee>
                         <employee>
                           <dept>2</dept>
                              <sec/>
                           <employee>
                 </Employees>

共有1个答案

杭英杰
2023-03-14

你是这样做的:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsi="3">

  <xsl:output indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*" priority="2">
        <xsl:element name="{local-name()}" namespace="1.2">
            <xsl:if test="self::Employees">
                <xsl:attribute name="xsi:schemalocation">4</xsl:attribute>          
            </xsl:if>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

您将标识转换作为默认值应用,然后重写元素,为它们提供新的命名空间以及employeese节点的特殊属性。我选择添加if语句,但是您也可以将该逻辑移到与Employee匹配的另一个模板中。我只是不想将整个xsl:element重复两次。真的是品味问题。

当我将此转换应用于输入文档时,我将得到以下结果:

<Employees xmlns="1.2" xmlns:xsi="3" xsi:schemalocation="4">
    <employee>
        <dept>1</dept>
        <sec/>
    </employee>
    <employee>
        <dept>2</dept>
        <sec/>
    </employee>
</Employees>

结果中有xmlns=“”可能是因为您没有重新创建新命名空间中的所有元素。此外,为了能够添加xsi:schemaLocation属性,您需要在转换文档上声明xsi命名空间。

 类似资料:
  • 我有这个xml是架构版本3.0http://www.test.com/Service/v3。我需要将其降级到版本1http://www.test.com/Service/v1.为此,我使用XSL来转换它。 但我得到这样的结果 在我的输出XML中,我得到了这个 为什么将其添加到NS2:消息中? 它不在输入xml中。 我遗漏了一些东西。如果有人能指出这个问题,我将不胜感激。 我希望在输出中创建以下内容

  • 如果我删除所有命名空间和前缀,我的XSLT转换将完美运行。 我曾尝试过几次引入名称空间,但最终总是出现某种错误或没有输出,因此我在这里寻求一些帮助和理解。 我的预期输出,缩减为命名空间和前缀,是: 再次缩减的XML输入是: 为了实现正确的命名空间转换,我需要向XSLT头中添加什么?

  • 我试图用XSLT处理器在PHP中转换xml文档,但我无法选择任何内容。。。我认为这是一个名称空间问题。如果我从一个干净的<代码> inputxml: Xsl-file: 我无法更改输入文件,因为它是由其他程序生成的。 安德烈

  • 我是XSLT的新手,命名空间有问题。这是我必须转换的XML: 我正在使用以下XSLT: 结果是: 我试图删除结果输入顺序中的名称空间,但它不适合我。有人能帮我学习XSLT吗?谢谢

  • 我需要一个简单的xslt,它接受输入并提供如下所述的输出。我已经编写了xslt,但名称空间被忽略了。你能帮我一下吗。 输入消息: 预期输出消息: 实际输出消息: XSLT:

  • 我试图将Excel xml文件的一部分呈现为超文本标记语言,以便在翻译(外语翻译)计算机辅助翻译工具中的部分内容时改进预览。 我有以下xml: 我试图从每行中提取第二个数据元素并显示它,但我根本无法显示它。我认为这与名称空间有关,我肯定遗漏了什么,但看不出是什么。这就是我正在使用的: 有人能帮我吗? 我应该补充一点,我正在使用Treebeard来测试这个,它用这些错误验证xml(我无法控制)...

  • 我有一个XML文件,其结构如下: XSD模式: 和可视化的XSL文件(学生tylesheet.xsl): 我目前正在学习一门关于XML的短期课程,任务是在XML文件中构建给定的XSD模式和一些示例记录,然后最终使用XSLT将内容可视化为超文本标记语言。其中一项任务指出,我需要使用“urn:学生”作为结构的默认命名空间。然而,当我这样做的时候,我不会在最终的可视化中收到数据。当我从XML文件中删除“

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码