XSLT忽略一些<apply-template .. =“”>标签</apply-template>

时间:2011-06-07 12:57:47

标签: xml xslt

我在现有的xml中插入一个新元素,我在xml文件中得到了我的xpaths(应该插入元素),所以我编写了一个根据该输入生成XSLT脚本的程序。现在每当我运行它时,它会将元素添加到某些xpath并忽略其余的,我包含了所有正在使用的命名空间,但它正在做的是它将进入某个层次结构级别并且它不会超过它,至少这是我所看到的。这里是两个模板的代码片段,一个插入元素,另一个不插入元素。请告诉我我在这里做错了什么..

这些是我可以添加的模板,因为它的大小:

        <xsl:copy>
            <flag sender="me" recipient="you" issueDateTime="02/14/2011">
                <flagSubject> Error </flagSubject>
                <message>
                    <p>r5 Designator Text is empty    </p>
                </message>
            </flag>
            <xsl:apply-templates select="@*| node()"/>
        </xsl:copy>
    </xsl:template>

        <xsl:copy>
            <flag sender="me" recipient="you" issueDateTime="02/14/2011">
                <flagSubject> Error </flagSubject>
                <message>
                    <p>r7 default title is blank    </p>
                </message>
            </flag>
            <xsl:apply-templates select="@*| node()"/>
        </xsl:copy>
    </xsl:template>

        <xsl:copy>
            <flag sender="me" recipient="you" issueDateTime="02/14/2011">
                <flagSubject> Error </flagSubject>
                <message>
                    <p>r7 default title is blank    </p>
                </message>
            </flag>
            <xsl:apply-templates select="@*| node()"/>
        </xsl:copy>
    </xsl:template>

        <xsl:copy>
            <flag sender="me" recipient="you" issueDateTime="02/14/2011">
                <flagSubject> Error </flagSubject>
                <message>
                    <p>r5 Designator Text is empty    </p>
                </message>
            </flag>
            <xsl:apply-templates select="@*| node()"/>
        </xsl:copy>
    </xsl:template>

        <xsl:copy>
            <flag sender="me" recipient="you" issueDateTime="02/14/2011">
                <flagSubject> Error </flagSubject>
                <message>
                    <p>r7 default title is blank    </p>
                </message>
            </flag>
            <xsl:apply-templates select="@*| node()"/>
        </xsl:copy>
    </xsl:template>

2 个答案:

答案 0 :(得分:1)

  

这是两个代码的片段   模板一个插入元素   而另一个没有插入   元素。请告诉我我的意思   我在这里做错了..

在提供的代码中,有两个模板,每个模板都覆盖特定元素的标识规则/模板。

第一个模板“根本不插入元素”这一事实意味着没有任何节点与此模板的匹配模式匹配。

如果您提供源XML文档,很多人会告诉您此XML文档中没有任何此类元素。

如果实际上有更多的模板(你没有显示),那么另一个可能的原因是由于更高的优先级而选择了另一个也匹配这些元素的模板 - 而另一个模板可能没有做任何事情这会产生输出。

相比之下,第二个模板显然与源XML文档中的元素匹配,并且它完成了它的目的。

摘要:第一个模板最可能出现的问题是它与XML文档中的任何节点都不匹配。

答案 1 :(得分:1)

我在你所谓的XML中发现了至少四个尚未声明的名称空间前缀。那时我放弃了。这告诉我两件事:(a)你发布的XML不是你正在运行的XML,并且(b)你还没有意识到获取命名空间错误是XPath表达式(或XSLT匹配模式)的最可能原因没有选择任何东西。