gpt4 book ai didi

XSLt 空白命名空间

转载 作者:行者123 更新时间:2023-12-04 05:46:26 25 4
gpt4 key购买 nike

我有 xml 我想按原样复制(检查 xmlns=""和标签。我想按原样创建。

进行总计算。只有这个问题。这是有效的。仍然客户希望预期的格式是那样的。非常感谢任何帮助。
三项任务

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

任何帮助提前非常感谢
拉梅什库马尔·辛格

输入.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>

最佳答案

这是你如何做到的:

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

您将身份转换应用为默认值,然后为元素覆盖它以给它们一个新的 命名空间 以及 Employees 的特殊属性节点。我选择添加一个 if语句,但您也可以将该逻辑移动到另一个匹配 Employees 的模板中.我只是不想重复整个 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 的属性转换文档上的命名空间。

关于XSLt 空白命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com