Xslt空白​​命名空间

时间:2012-05-15 14:09:50

标签: xslt namespaces

我想要复制xml(检查xmlns =“”和标签。我想按原样创建。总计算很小心。只有这个问题。它是有效的。仍然客户想要预期的格式任何帮助都非常感激。

        **Input.xml**

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

预期

     <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>

实际

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

1 个答案:

答案 0 :(得分:0)

除非我误解了您的要求,否则您只需匹配 Employees 元素,并输出添加了所需命名空间的新元素。您还需要匹配其他元素,并在其上指定默认命名空间以避免出现xmlns=''

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

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

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

   <xsl:template match="Employees">
      <Employees xmlns="1.2" xmlns:xsi="3" xsi:schemalocation="4">
         <xsl:apply-templates select="@*"/>
         <totalemp>
            <xsl:value-of select="count(employee)"/>
         </totalemp>
         <xsl:apply-templates select="node()"/>
      </Employees>
   </xsl:template>
</xsl:stylesheet>

当应用于您的示例XML时,输出以下内容:

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