gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:24:27 24 4
gpt4 key购买 nike

我正在尝试使用 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" 时,您的所有元素(没有 namespace 前缀或覆盖 namespace 声明)都将继承该 namespace 并绑定(bind)到命名空间 http://kiris.nps21.org/xsd。如果没有 namespace 前缀,有时很难注意到或理解。

您应该调整 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>

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

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