XML元素重新排序不起作用XSLT

舒巴姆·库玛(Shubham Kumar)

我正在尝试使用XSLT 1.0对XML中的元素进行重新排序。以下是XML的小片段

<RIMSDB1 xmlns="http://kiris.nps21.org/xsd">
    <ROW>
        <ReportID>1</ReportID>
        <WKYMD>20160610</WKYMD>
        <RunSystemDate>20160610032048</RunSystemDate>
    </ROW>
    <ROW>
        <ReportID>2</ReportID>
        <WKYMD>27869</WKYMD>
        <RunSystemDate>495876043985778649</RunSystemDate>
    </ROW>

这是我用来对其进行转换的XSLT。

<xsl:template match="*/ROW">
<xsl:copy>
    <xsl:apply-templates select="@*" />
    <xsl:apply-templates select="WKYMD" />
    <xsl:apply-templates select="RunSystemDate" />
    <xsl:apply-templates select="ReportID" />
</xsl:copy>

问题是,当我进行转换时,顺序没有任何变化,但是我从中删除了xmlns =“ http://kiris.nps21.org/xsd”

<RIMSDB1 xmlns="http://kiris.nps21.org/xsd">

我得到正确的转换,即:

<RIMSDB1>

    <ROW>
    <WKYMD>20160610</WKYMD>
    <RunSystemDate>20160610032048</RunSystemDate>
    <ReportID>1</ReportID>
</ROW>
    <ROW>
    <WKYMD>27869</WKYMD>
    <RunSystemDate>495876043985778649</RunSystemDate>
    <ReportID>2</ReportID>
</ROW>

如果有更好的重新排序方法,任何人都可以对正在发生的事情有所了解。

提前致谢。

汉斯(Mads Hansen)

当源文档包含时,xmlns="http://kiris.nps21.org/xsd"所有元素(不带名称空间前缀或覆盖名称空间的声明)将继承该名称空间并绑定到该名称空间http://kiris.nps21.org/xsd当没有名称空间前缀时,有时很难注意到或理解。

您应该调整XSLT以使用前缀声明该名称空间,然后调整选择和匹配表达式以使用名称空间前缀,以便正确地寻址那些元素。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:k="http://kiris.nps21.org/xsd"
    version="1.0">
    <xsl:template match="*/k:ROW">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:apply-templates select="k:WKYMD" />
            <xsl:apply-templates select="k:RunSystemDate" />
            <xsl:apply-templates select="k:ReportID" />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章