gpt4 book ai didi

c# - 来自 C# 的 XSLT 参数(XML 到 XML)

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:36 26 4
gpt4 key购买 nike

我需要将一个 XML 文件转换为另一个经过过滤的 XML。我想使用 XSLT/C# 来执行此操作。我在 C# 中的源代码将执行带有参数列表的 XSLT 文件(我正在使用 XslCompiledTransform 类)。

我的问题是:如何在 XSLT 语言中解析从 C# 传输的所有参数以过滤输出 XML 文件。

示例:汽车列表

 <cars>
<car brand="Audi" model="A4/>
<car brand="Audi" model="A6/>
<car brand="Audi" model="A7/>
<car brand="Volvo" model="V40" />
<car brand="Volvo" model="V60" />
<car brand="Honda" model="Civic" />
<car brand="Mercedes" model="Class E" />
</cars>

带有 brandsSelect 参数的简单 XSLT

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
<xsl:param name="brandsSelect"></xsl:param>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

在我的 C# 源代码中,我填充了我的变量:brandsSelect = 沃尔沃、本田

预期结果:

 <cars> 
<car brand="Volvo" model="V40" />
<car brand="Volvo" model="V60" />
<car brand="Honda" model="Civic" />
</cars>

感谢您的帮助!

最佳答案

您可以做的(在 XSLT 1.0 中,这是 XSLTCompiledTransform 实现的)是进行字符串测试以查看参数是否“包含”brand 属性:

<xsl:template match="cars">
<xsl:copy>
<xsl:apply-templates select="car[contains($brandsSelect, @brand)]" />
</xsl:copy>
</xsl:template>

但是,如果一个品牌恰好是另一个品牌的子字符串(例如,如果“Laudi”既是品牌又是“Audi”

所以,为了让它更健壮,试试这个 XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
<xsl:output method="xml" indent="yes" />

<xsl:param name="brandsSelect">Volvo,Honda</xsl:param>

<xsl:variable name="brandMatcher" select="concat(',', $brandsSelect, ',')" />

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="cars">
<xsl:copy>
<xsl:apply-templates select="car[contains($brandMatcher, concat(',', @brand, ','))]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

请务必注意,brandsSelect 的值不应包含品牌之间的任何空格,只能包含逗号。

关于c# - 来自 C# 的 XSLT 参数(XML 到 XML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49557093/

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