当前位置: 首页 > 知识库问答 >
问题:

为什么我的标记在XSLT转换后被扩展(以及如何修复)?

余弘毅
2023-03-14

我有来自SQLServer的XML。我无法让SQLServer允许我有条件地更改节点的名称,所以我稍后使用XSLT进行更改。我真的不知道我在用XSLT做什么--我是根据在StackOverflow上搜索到的东西来拼凑我的解决方案的。我遇到的问题是,在输入中没有子标记(因此只有一个标记)的标记在转换后被扩展为有一个开始和结束标记。我想防止这种情况,因为我们有足够的用户,带宽是一个问题。

输入为:

<assessdata>
    <controls>
        <questRequiredOverride>N</questRequiredOverride>
    </controls>
    <paths>
        <path id="SJ">
            <questionFile timeScreen="" timeEstimate="0">SJ-CVS-Section-Mgt</questionFile>
            <questionFile timeScreen="SitJudge" timeEstimate="5">SJ-CVS-Mgt</questionFile>
            <questionFile timeScreen="SitJudge" timeEstimate="5">SJ-CVS-Mgt-SS</questionFile>
            <sequence>
                <group>
                    <content_block presentation="SituationalJudgmentInstructions"
                        type="instructions">
                        <questions>
                            <question id="sjex"/>
                        </questions>
                    </content_block>
                    <content_block presentation="SituationalJudgmentQuestions" type="exercise"
                        path="1">
                        <questions>
                            <question id="sj6_Mgt"/>
                            <question id="sj7_Mgt"/>
                        </questions>
                    </content_block>
                    <content_block presentation="SituationalJudgmentQuestions" type="exercise"
                        path="2">
                        <questions>
                            <question id="sj13_SS"/>
                            <question id="sj12_SS"/>
                            <question id="sj10_SS"/>
                            <question id="sj8_SS"/>
                            <question id="sj5_SS"/>
                            <question id="sj3_SS"/>
                        </questions>
                    </content_block>
                    <content_block presentation="Intermission" type="intermission"/>
                </group>
            </sequence>
        </path>
...
        <path id="Scoring">
            <sequence>
                <group>
                    <content_block presentation="Scoring" type="scoring"/>
                </group>
            </sequence>
        </path>
        <path id="Feedback">
            <questionFile timeScreen="" timeEstimate="0">Feedback-CVS</questionFile>
            <sequence>
                <group>
                    <content_block presentation="Feedback" type="exercise" path="1">
                        <questions>
                            <question id="fb30"/>
                            <question id="fb32"/>
                            <question id="fb40"/>
                            <question id="fb50"/>
                        </questions>
                    </content_block>
                </group>
            </sequence>
        </path>
    </paths>
</assessdata>

XSLT是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="content_block">
        <xsl:element name="{@type}">
        <xsl:apply-templates select="@*|node()"></xsl:apply-templates>
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

...输出为:

<assessdata>
    <controls>
        <questRequiredOverride>N</questRequiredOverride>
    </controls>
    <paths>
        <path id="SJ">
            <questionFile timeScreen="" timeEstimate="0">SJ-CVS-Section-Mgt</questionFile>
            <questionFile timeScreen="SitJudge" timeEstimate="5">SJ-CVS-Mgt</questionFile>
            <questionFile timeScreen="SitJudge" timeEstimate="5">SJ-CVS-Mgt-SS</questionFile>
            <sequence>
                <group>
                    <instructions presentation="SituationalJudgmentInstructions" type="instructions">
                        <questions>
                            <question id="sjex"> </question>
                        </questions>
                    </instructions>
                    <exercise presentation="SituationalJudgmentQuestions" type="exercise" path="1">
                        <questions>
                            <question id="sj6_Mgt"> </question>
                            <question id="sj7_Mgt"> </question>
                        </questions>
                    </exercise>
                    <exercise presentation="SituationalJudgmentQuestions" type="exercise" path="2">
                        <questions>
                            <question id="sj13_SS"> </question>
                            <question id="sj12_SS"> </question>
                            <question id="sj10_SS"> </question>
                            <question id="sj8_SS"> </question>
                            <question id="sj5_SS"> </question>
                            <question id="sj3_SS"> </question>
                        </questions>
                    </exercise>
                    <intermission presentation="Intermission" type="intermission"> </intermission>
                </group>
            </sequence>
        </path>
...
        <path id="Scoring">
            <sequence>
                <group>
                    <scoring presentation="Scoring" type="scoring"> </scoring>
                </group>
            </sequence>
        </path>
        <path id="Feedback">
            <questionFile timeScreen="" timeEstimate="0">Feedback-CVS</questionFile>
            <sequence>
                <group>
                    <exercise presentation="Feedback" type="exercise" path="1">
                        <questions>
                            <question id="fb30"> </question>
                            <question id="fb32"> </question>
                            <question id="fb40"> </question>
                            <question id="fb50"> </question>
                        </questions>
                    </exercise>
                </group>
            </sequence>
        </path>
    </paths>
</assessdata>

更新
我正在用ASP Classic并使用TransformNode将XML和XSL加载到MSXML2.domDocument3.0中。我已经设法通过在结果字符串上使用Replace来修复UTF编码,但是我对这个解决方案并不满意。

共有1个答案

慎芷阳
2023-03-14

由于某种原因,从MSXML2.DOMDocument3.0更改为MSXML2.DOMDocument6.0修复了第一个问题。即使在XSLT中设置编码也没有解决第二个问题(这似乎是transformNode的一个已知问题)。相反,我使用了omit-xml-declaration=“yes”,它实际上并不省略XML声明,但省略了编码值。我用它做什么,这对我来说已经够好的了。

 类似资料:
  • 请解释Spring中关于异常的以下内容: 这是什么意思? 在什么条件下抛出? 如何预防? 这篇文章是关于使用Spring的应用程序中出现的全面问答。

  • 我有一些代码,当我运行它时会产生一个错误,说: NoSuchMethod:对null调用了方法“XYZ” 这意味着什么?我该如何修复它?

  • 一般来说,“可能的有损转换”错误消息是什么意思,您如何修复它?

  • 一般来说,“可能的有损转换”错误消息意味着什么,您如何修复它?

  • 问题内容: 我以为Python信任程序员。 问题答案: 圭多对此的看法: 我昨晚想到了这一点,意识到根本不应该允许您继承bool!子类仅在具有实例时才有用,但是仅存在bool子类的实例将打破不变的事实,即True和False是bool的唯一实例!(C的子类的实例也是C的实例。)我认为重要的是不要提供后门来创建其他bool实例,因此我认为bool不应是子类的。 参考: http //mail.pyt

  • 问题内容: 我对Linux中的$ PATH有一些疑问。 我知道它告诉shell搜索可执行文件的目录,因此: 环境变量是什么意思? 如何改变其路径?并建议更改它? 如果我更改它,后果是什么? 问题答案: 要获取路径当前变量,请输入: 它告诉您的Shell在哪里寻找二进制文件。 是的,您可以更改它-例如,使用自定义脚本添加到文件夹。 因此:如果要执行脚本,则必须输入脚本的完整路径: 更改变量后,只需键