gpt4 book ai didi

xml - 使用命名空间时无法复制和修改 XSLT 中的属性

转载 作者:行者123 更新时间:2023-12-03 16:59:36 25 4
gpt4 key购买 nike

我正在尝试转换 XML 文档并修改单个元素的属性,但如果根元素具有命名空间属性,则不会应用转换。只需删除 xmlns 即可使用我的代码。

我的 XML:

<?xml version="1.0"?>
<BIDomain xmlns="http://www.oracle.com/biee/bi-domain">
<BIInstance name="coreapplication">
<SecurityOptions sslManualConfig="false" sslEnabled="false" ssoProvider="Custom" ssoEnabled="false">
<SecurityService>
<EndpointURI>bisecurity/service</EndpointURI>
</SecurityService>
</SecurityOptions>
</BIInstance>
</BIDomain>

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

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

<!-- Add the new attributes -->
<xsl:template match="SecurityOptions">
<xsl:copy>
<xsl:attribute name="ssoProviderLogoffURL"/>
<xsl:attribute name="ssoProviderLogonURL"/>
<xsl:attribute name="sslVerifyPeers">
<xsl:value-of select="'false'" />
</xsl:attribute>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

最终结果是相同的 XML。如果我从根元素中删除命名空间定义
<BIDomain xmlns="http://www.oracle.com/biee/bi-domain">转换正常应用。我假设我做错了什么并且命名空间属性干扰了匹配。

有任何想法吗?

最佳答案

您尝试匹配的元素位于 namespace (默认 namespace )中,因此您需要在 XSLT 中正确使用 namespace :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bi="http://www.oracle.com/biee/bi-domain">
<!-- ^----- here -->
<xsl:output method="xml" version="1.0" standalone="yes" />

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

<!-- Add the new attributes -->
<!-- v------- and here -->
<xsl:template match="bi:SecurityOptions">
<xsl:copy>
<xsl:attribute name="ssoProviderLogoffURL"/>
<xsl:attribute name="ssoProviderLogonURL"/>
<xsl:attribute name="sslVerifyPeers">
<xsl:value-of select="'false'" />
</xsl:attribute>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

关于xml - 使用命名空间时无法复制和修改 XSLT 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675224/

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