Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有XML类文件的动态XSLT_Xml_Xslt_Dynamic - Fatal编程技术网

所有XML类文件的动态XSLT

所有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

我是XSLT新手,我还开发了一个审计跟踪系统, 每个操作(例如编辑、添加新的和删除)都将跟踪每个对象,我已经将对象的OldValue和NewValue作为XML插入到数据库中

在UI中,我将向用户显示审计详细信息,如下图所示:

但我决定用“全名”代替“全名”,或者用“日历名”代替“日历名” 或者在将来,我想使用多种语言的标题

生成的OldValue的XML为:

   <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作为示例来使用!