gpt4 book ai didi

xml - XSLT,动态设置命名空间并从输出 xml 中删除命名空间

转载 作者:行者123 更新时间:2023-12-04 17:02:35 25 4
gpt4 key购买 nike

我的源xml是:

<?xml version="1.0" encoding="UTF-8"?>
<PMML version="4.1" xmlns="http://www.dmg.org/PMML-4_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dmg.org/PMML-4_1 pmml-4-1.xsd">
<Header copyright="(C) Copyright IBM Corp. 1989, 2014.">
<Application name="IBM SPSS Statistics 23.0" version="23.0.0.0"/>
</Header>
<GeneralRegressionModel algorithmName="multinomialLogistic" functionName="classification" modelType="multinomialLogistic" targetVariableName="CLASS">
<MiningSchema>
<MiningField missingValueTreatment="asIs" name="CLASS" usageType="predicted"/>
<MiningField missingValueTreatment="asIs" name="ACTIVE_CUSTOMER" usageType="active"/>
<MiningField missingValueTreatment="asIs" name="SEGMENT" usageType="active"/>
</MiningSchema>
<ParameterList>
<Parameter label="Konstanter Term" name="P0000001"/>
<Parameter label="[ACTIVE_CUSTOMER=0]" name="P0000002"/>
<Parameter label="[ACTIVE_CUSTOMER=1]" name="P0000003"/>
<Parameter label="[SEGMENT=0]" name="P00000004"/>
<Parameter label="[SEGMENT=1]" name="P00000005"/>
</ParameterList>
<ParamMatrix>
<PCell beta="-167.307903919999" df="1" parameterName="P0000001" targetCategory="1"/>
<PCell beta="-0.0747629275586869" df="1" parameterName="P0000002" targetCategory="1"/>
<PCell beta="0.409965797830495" df="1" parameterName="P0000003" targetCategory="1"/>
<PCell beta="-1.03190717557433" df="1" parameterName="P0000004" targetCategory="1"/>
<PCell beta="0.904157514089376" df="1" parameterName="P0000005" targetCategory="1"/>
</ParamMatrix>
</GeneralRegressionModel>
</PMML>

我的输出 xml 是:
<?xml version="1.0" encoding="utf-8"?>
<Predictors xmlns:ns="some:ns" xmlns:rs="http://www.dmg.org/PMML-4_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Predictor coefficient="-167.307903919999" name="__INTERCEPT__" value=""/>
<Predictor coefficient="-0.0747629275586869" name="ACTIVE_CUSTOMER" value="0"/>
<Predictor coefficient="0.409965797830495" name="ACTIVE_CUSTOMER" value="1"/>
<Predictor coefficient="" name="SEGMENT" value="0"/>
<Predictor coefficient="" name="SEGMENT" value="1"/>
</Predictors>

我可以使用以下 xslt 实现这一点:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:ns="some:ns" xmlns:rs="http://www.dmg.org/PMML-4_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<xsl:output encoding="utf-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>

<xsl:key match="rs:ParamMatrix/rs:PCell" name="cell" use="@parameterName"/>
<xsl:key match="rs:DataDictionary/rs:DataField" name="dataField" use="@name"/>

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

<xsl:template match="rs:GeneralRegressionModel">
<!--MiningSchema-->
<xsl:apply-templates select="rs:MiningSchema"/>

<!--RegressionTable for predicted targetVariable targetCategory-->
<Predictors>
<xsl:apply-templates select="rs:ParameterList/rs:Parameter"/>
</Predictors>

</xsl:template>

<xsl:template match="rs:Parameter[not(contains(@label, '='))][@name='P0000001']">
<Predictor coefficient="{key('cell', @name)/@beta}" name="__INTERCEPT__" value=""/>
</xsl:template>

<xsl:template match="rs:Parameter[not(contains(@label, '='))][@name!='P0000001']">
<Predictor coefficient="{key('cell', @name)/@beta}" name="{@label}" value=""/>
</xsl:template>

<xsl:template match="rs:Parameter[contains(@label, '=')]" name="split">
<Predictor coefficient="{key('cell', @name)/@beta}" name="{substring-after(substring-before(@label,'='),'[')}" value="{substring-before(substring-after(@label,'='),']')}"/>
</xsl:template>

</xsl:transform>

这个 XSLT 有效。
但是,我有两个问题:
1.在源xml的开头,有命名空间,例如'xmlns="http://www.dmg.org/PMML-4_1"',可以是其他值。整个文档只使用这一个命名空间。目前在我的 xslt 中,我将命名空间设置为固定值 'xmlns:rs="http://www.dmg.org/PMML-4_1"',这是不正确的。如何在 xslt 中动态设置命名空间?
  • 一旦我在 xslt 中设置了命名空间,它也会显示在输出 xml 中。如何从输出 xml 中删除此命名空间?

  • 如果可以的话,能否请您直接修改我的 xslt 以显示用法?

    非常感谢!!!

    最佳答案

    在运行时才知道的命名空间中创建元素:

    (a) 更改任何文字结果元素,例如 <Predictor/><xsl:element name="Predictor" namespace="{$ns}'/>
    (b) 更改 <xsl:copy/> 的任何用途至 <xsl:element name="{local-name()}" namespace="{$ns}'/>
    (c) 更改 <xsl:copy-of/> 的任何用途使用修改后的身份模板使用 <xsl:element/> 复制到递归副本如上。

    或者,与控制此 XML 词汇表的人员交谈并询问他们为什么以这种方式滥用 namespace 。

    关于xml - XSLT,动态设置命名空间并从输出 xml 中删除命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034238/

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