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

标签 c# xml xslt xslt-1.0

我正在尝试使用 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>

如果有更好的重新排序方法,任何人都可以阐明正在发生的事情吗?

提前致谢。

最佳答案

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

您应该调整 XSLT 以声明带有前缀的 namespace ,然后调整选择和匹配表达式以使用 namespace 前缀,以便正确处理这些元素。

例如:

<?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>

关于c# - XML 元素重新排序不起作用 XSLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801213/

相关文章:

html - 如何让xsl :fo allow table cell to take empty blocks and print mutiple lines

c# - 如何使用汇编版本的预处理器条件?

php - 如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?

xml - 将节点添加到 XML 而不复制 xmlns =""属性

xslt - 在 XSLT 中匹配具有命名空间前缀的元素

xml - 检查 *output* 节点是否已经存在

服务器上 GetThumbnailImage 中的 C# 内存不足异常

c# - 为什么不收集辅助线程中使用的对象

c# - Process.Start() 中的错误——系统找不到指定的文件

android - 无法将 child 添加到 linearLayout