首页 / XML / C#的XSLT参数(从XML到XML)
C#的XSLT参数(从XML到XML)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#的XSLT参数(从XML到XML),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1944字,纯文字阅读大概需要3分钟。
内容图文
我需要将一个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#源代码中,填充变量:
brandSelect =沃尔沃,本田
预期结果 :
<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#的XSLT参数(从XML到XML)全部内容,希望文章能够帮你解决C#的XSLT参数(从XML到XML)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。