我想要复制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>
答案 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>