所有XML类文件的动态XSLT
我是XSLT新手,我还开发了一个审计跟踪系统, 每个操作(例如编辑、添加新的和删除)都将跟踪每个对象,我已经将对象的OldValue和NewValue作为XML插入到数据库中 在UI中,我将向用户显示审计详细信息,如下图所示: 但我决定用“全名”代替“全名”,或者用“日历名”代替“日历名” 或者在将来,我想使用多种语言的标题 生成的OldValue的XML为:所有XML类文件的动态XSLT,xml,xslt,dynamic,Xml,Xslt,Dynamic,我是XSLT新手,我还开发了一个审计跟踪系统, 每个操作(例如编辑、添加新的和删除)都将跟踪每个对象,我已经将对象的OldValue和NewValue作为XML插入到数据库中 在UI中,我将向用户显示审计详细信息,如下图所示: 但我决定用“全名”代替“全名”,或者用“日历名”代替“日历名” 或者在将来,我想使用多种语言的标题 生成的OldValue的XML为: <BasicInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan
<BasicInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserIdentify>100</UserIdentify>
<UserName>user1</UserName>
<FullName>Ali Hassanabadi</FullName>
<Email>ali.h@test.com</Email>
<LogInCounter>0</LogInCounter>
<Title>Dr.</Title>
<Label />
<Theme>dark-hive</Theme>
<Language>English</Language>
<CalendarName>Gregorian</CalendarName>
<ExpireDate xsi:nil="true" />
<Status>1</Status>
</BasicInfo>
现在,当显示旧值或新值时,我通过调用程序集名称以及
对于每个属性,我必须通过反射找到它的属性标题
大概是这样的:
public class BasicInfo : IAuditable
{
[AuditingTitle("Full Name")]
public string FullName
{
get;
set;
}
}
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Found">
<div>
<b>Here bind to found title of properties</b>
<xsl:value-of select="PropertyValue"/>
</div>
</xsl:template>
</xsl:stylesheet>
此处绑定到找到的属性标题
那么,有没有办法定义一个与所有生成的XML兼容的XSLT(动态)
提前感谢。我不太确定我是否正确地解释了您的问题,但如果这只是将您的
“记录”转换为键-值对结构,使用XML标记名作为键,那么在XSLT 1.0中,entityname
从外部传递到XSLT进程,这是一种可行的方法:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:param name="entityname" select="'BasicInfo'"/>
<xsl:template match="/*">
<xsl:if test="local-name() = $entityname">
<tab>
<xsl:for-each select="*">
<row>
<div><xsl:value-of select="local-name()"/></div>
<div><xsl:value-of select="."/></div>
</row>
</xsl:for-each>
</tab>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
请注意,这种方法有点笨拙,因为XSLT1.0不允许在匹配表达式中使用参数/变量(请参阅)
XSLT将生成以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<tab>
<row>
<div>UserIdentify</div>
<div>100</div>
</row>
<row>
<div>UserName</div>
<div>user1</div>
</row>
<row>
<div>FullName</div>
<div>Ali Hassanabadi</div>
</row>
<row>
<div>Email</div>
<div>ali.h@test.com</div>
</row>
<row>
<div>LogInCounter</div>
<div>0</div>
</row>
<row>
<div>Title</div>
<div>Dr.</div>
</row>
<row>
<div>Label</div>
<div/>
</row>
<row>
<div>Theme</div>
<div>dark-hive</div>
</row>
<row>
<div>Language</div>
<div>English</div>
</row>
<row>
<div>CalendarName</div>
<div>Gregorian</div>
</row>
<row>
<div>ExpireDate</div>
<div/>
</row>
<row>
<div>Status</div>
<div>1</div>
</row>
</tab>
用户识别
100
用户名
用户1
全名
阿里·哈桑纳巴迪
电子邮件
阿里。h@test.com
登录计数器
0
标题
博士
标签
主题
暗箱
语言
英语
日历名
格里高利
过期时间
地位
1.
谢谢,很好,我又向前迈进了一步,但是我如何定义一个XSLT来为所有XML格式生成输出(我指的是在运行时更改匹配)?嵌套XML如何?关于在运行时选择实体名称,请参阅我的更新答案。关于嵌套XML:可能是可行的,但您必须提供一个嵌套XML作为示例来使用!