gpt4 book ai didi

xml - 默认命名空间未正确转换

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

我想将默认 namespace (转换时)添加到元素。我使用 xslt 进行此转换。请找到下面的代码片段。

<xsl:variable name="ns" select="'http://ABC.org/Standards/SChool/2'" />

<xsl:element name="School" namespace="{$ns}">
<xsl:attribute name="Version">2.13.92</xsl:attribute>
<xsl:apply-templates select="ltc:UserAuthRequest" />
</xsl:element>

<xsl:template match="ltc:UserAuthRequest">
<xsl:element name="{local-name()}">
</xsl:template>

转换后,我得到了下面的 xml 输出。
<School xmlns="http://ABC.org/Standards/SChool/2" Version="2.13.92">
<UserAuthRequest xmlns=""></UserAuthRequest>
</School>

这里的问题是默认命名空间也是在子节点中创建的。

任何人都可以解释为什么命名空间是在子元素中创建的,即使我没有为此定义任何命名空间以及如何避免这个问题?

输入 XML
<?xml version="1.0" encoding="UTF-8"?>
<School>

<UserAuth>
<UserName>K.Senthuran</UserName>
<Password>Javaworld</Password>
</UserAuth>

</School>

转换逻辑
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/School">

<xsl:variable name="ns">www.school.com/myLife</xsl:variable>
<xsl:element name="School" namespace="{$ns}">
<xsl:apply-templates select="UserAuth" />
</xsl:element>
</xsl:template>

<xsl:template match="UserAuth">
<xsl:element name="UserAuth">
<xsl:attribute name="id">sdmnsdnk</xsl:attribute>

<xsl:apply-templates select="UserName" />
<xsl:apply-templates select="Password" />
</xsl:element>
</xsl:template>

<xsl:template match="UserName">
<xsl:element name="{local-name()}">
<xsl:attribute name="userIDREF">dmsdmsl</xsl:attribute>

<xsl:value-of select="." />
</xsl:element>
</xsl:template>

<xsl:template match="Password">

<xsl:element name="{local-name()}">
<xsl:attribute name="uniqueIDREF">asakjhs</xsl:attribute>

<xsl:value-of select="." />
</xsl:element>
</xsl:template>

<xsl:template match="@*">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:template>

</xsl:stylesheet>

电流输出
<?xml version="1.0" encoding="UTF-8"?>
<School xmlns="www.school.com/myLife">
<UserAuth xmlns="" id="sdmnsdnk">
<UserName userIDREF="dmsdmsl">K.Senthuran</UserName>
<Password uniqueIDREF="asakjhs">Javaworld</Password>
</UserAuth>
</School>

预期输出
<?xml version="1.0" encoding="UTF-8"?>
<School xmlns="www.school.com/myLife">
<UserAuth id="sdmnsdnk">
<UserName userIDREF="dmsdmsl">K.Senthuran</UserName>
<Password uniqueIDREF="asakjhs">Javaworld</Password>
</UserAuth>
</School>

最佳答案

问题是当您创建 时用户身份验证请求 你没有给它命名空间

<xsl:element name="{local-name()}" />

因此 XSLT 将生成一个没有 namespace 的元素,因此 xmlns="" .假设您的 ns 变量在范围内是全局的,只需以与 相同的方式创建元素学校元素
<xsl:element name="{local-name()}" namespace="{$ns}" />

其实你不需要 本地名称如果您要匹配特定元素,请点击此处。这也行
<xsl:element name="UserAuthRequest" namespace="{$ns}" />

关于xml - 默认命名空间未正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15698039/

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