HTML支持页面,通过XML,XSLT,HTML,CSS,Bootstap。 。净

时间:2015-12-16 10:17:34

标签: c# xml asp.net-mvc xslt adminlte

我正在尝试为公司中的所有应用程序生成一个通用的支持/帮助页面。要求如下:

  • 每个应用程序都有一个关于应用程序支持/安装/常见问题等的XML页面(具有预定义的结构)。
  • 基于这个xml页面我们需要创建html页面(虽然是XSLT)并使用一些更好的bootstrap(AdminLTE等)库(为了更好的外观和感觉)
  • 主页将从不同的XML生成,该XML将具有XML的链接和路径。

Links.xml如下:

<Links>
  <link>
    <url>Application 1</url>
    <FilePath>/Files/App1.xml</FilePath>
  </ link >
  <link>
    <url>Application 2</url>
    <FilePath>/Files/App2.xml</FilePath>
  </link >
  <link>
    <url>Application 3</url>
    <FilePath>/Files/App3.xml</FilePath>
  </link >
</Links>

然后是Application XML文件,如下所示:App.xml

<Contents>
  <Header> Help Path for Application 1</Header>
  <Summary> This application is used to raise new requests to create User ID’s. It has workflow attached to it which can be used ?????. 
</Summary>
  <Support>
    <Email>abc@gmail.com </Email>
    <Phone> +1 82828 29282 2727 </Phone>
    <Text> Please contact ??? in department </Text>
  </Support>
  <FAQS>
    <FAQ>
      <QUESTION> For installation what I should Do</ QUESTION >
      <ANSWER> Click on this link. And download the installer. Please note that you need Admin rights for it. /ANSWER>
        <ANSWER> If you are on company network then it can be installed through My Portal </ANSWER>
      </FAQ>
      <FAQ>
        <QUESTION> Question 2</ QUESTION >
        <ANSWER> Answer 1 /ANSWER>
          <ANSWER> Answer 2 </ANSWER>
          <ANSWER> Answer 3 </ANSWER
</FAQ>
        </FAQS>
      </Contents>

最后我们需要HTML中的输出(仅限示例)

enter image description here

想法是保持灵活性,因此只要新应用程序需要添加它,就可以通过输入Links.xml并创建相应的XML文件来添加。

  1. 我可以使用ASP.NET Web表单或MVC。
  2. 或简单的静态html页面。虽然我更喜欢MVC
  3. 知道我应该如何追求这个吗?关于这一点的一些例子将是可观的。

    干杯。

2 个答案:

答案 0 :(得分:0)

是的,我有一个解决方案,它叫做ProjFlx,在GitHub上托管的开源项目:https://github.com/Xportability/ProjFlx

ProjFlx的使用几乎符合您对T的要求,但您的结构除外,尽管此Web框架非常灵活,您可以轻松地将其合并到您的框架中。否则,整个应用程序导航是从公共目录结构和每个文件夹中找到的常见Xml文档驱动的。此Xml中的内容将写入页面。在此页面Xml中,您将找到..结构中的子页面部分。

ProjFlx正在多个网站上使用,包括:meetscoresonline.com,riocrest.com,xportability.com,cloudformatter.com等。

一个例子说明了一切。我从网站meetcoresonline.com/help

中包含了这个Xml文档的链接

[此页面的Xml] http://www2.meetscoresonline.com/Resources/projectFlx/Help/help.xml

[此页面的Xsl] http://www2.meetscoresonline.com/Resources/projectFlx/Help/help.xml

[更极端的Xslt示例] http://www2.meetscoresonline.com/Resources/projectFlx/Register/Register.xsl

ProjFlx内容可以分发到您的CDN,因此您可以完全分离Web内容和二进制文件。

ProjFlx是一个开源项目,连同它的.Net src。

ProjFlx代码是用C#编写的。 Projflx核心暴露3层,TMPLT / SITE / PAGE。每个都有一个INIT / MAIN / TERMINATE。 TMPLT MAIN调用SITE INIT然后SITE MAIN然后SITE TERMINATE和SITE MAIN调用PAGE INIT / PAGE MAIN / PAGE TERMINATE。在您的代码中,(典型的)覆盖每个虚拟SITE方法,然后按页面请求为页面编写必要的业务逻辑。

ProjFlx不是MVC,ProjFlx不是Windows Forms,它是自己的Web框架,在后端利用C#.NET,Xml / Xslt生成内置Twitter Bootstrap的HTML.ProjFlx包含自己的内置自定义数据层用于生成&#34; good&#34;的XmlWriter操作Xml(不是你得到的Xml和ADO.Net记录集)。这个数据类甚至会爆炸json&#34;从数据库中的字段到Xml。假设您有一些字段,其内容为:

{ "ProjFlx": { "Version":"1.0", "License":"Open" }}

在您生成的Xml中爆炸为:

<ProjFlx>
   <Version>1.0</Version>
   <License>Open</License>
</ProjFlx>

我希望你看看!

答案 1 :(得分:0)

这是一个纯粹使用XSLT的解决方案。

主页将是......

<html>
<head>
  <title>ACME Corporation Support Page</title>
  <link href="support.css" rel=stylesheet type="text/css"> 
  <!-- Use support.css to style the page, as you please. --> 

  <script type="text/javascript" language="javascript" src="js/Saxonce/Saxonce.nocache.js"></script> 
  <script type="application/xslt+xml" language="xslt2.0" src="support.xsl" data-source="Links.xml"></script>  

<style>
span.pseudo-a { /* Mimic an 'a' element. */
     cursor:pointer;
     color:blue;
     text-decoration:underline;
}
span.pseudo-a:hover {
    color: #444444;    
</style>

</head>

<body>
<form>
  <h3>ACME Corporation - Our Products</h3> 
</form>


<table>
  <tbody>
    <tr>
      <td id="left-pane">
      </td>
      <td id="right-pane">Click an application link on the left-hand panel for more information.
      </td>
    </tr>    
  </tbody>
</table>

</body>
</html>

链接数据文件将如下所示...... (相对网址Links.xml

<Links>
  <link>
    <url>Application 1</url>
    <FilePath>app-meta/App1.xml</FilePath>
  </link>
  <link>
    <url>Application 2</url>
    <FilePath>app-meta/App2.xml</FilePath>
  </link >
  <link>
    <url>Application 3</url>
    <FilePath>app-meta/App3.xml</FilePath>
  </link >
</Links>

* ...特定于应用程序的文件将如下所示...... (相对网址如app-meta/App1.xml等)。

<Contents>
    <Header> Help Path for Application 1</Header>
    <Summary> This application is used to raise new requests to create User ID&apos;s. It has workflow attached to it which can be used. 
      </Summary>
    <Support>
        <Email>abc@gmail.com </Email>
        <Phone> +1 82828 29282 2727 </Phone>
        <Text> Please contact George in department </Text>
    </Support>
    <FAQS>
        <FAQ>
            <QUESTION> For installation what I should Do</QUESTION>
            <ANSWER> Click on this link. And download the installer. Please note that you need Admin rights for it. </ANSWER>
            <ANSWER> If you are on company network then it can be installed through My Portal </ANSWER>
        </FAQ>
        <FAQ>
            <QUESTION> Question 2</QUESTION>
            <ANSWER> Answer 1 </ANSWER>
            <ANSWER> Answer 2 </ANSWER>
            <ANSWER> Answer 3 </ANSWER>
        </FAQ>
    </FAQS>
</Contents>

此XSLT 2.0样式表将根据需要设置xml数据样式。(相对网址support.xsl

<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ixsl="http://saxonica.com/ns/interactiveXSLT"
    xmlns:prop="http://saxonica.com/ns/html-property"
    xmlns:style="http://saxonica.com/ns/html-style-property"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs prop"
    extension-element-prefixes="ixsl"
    version="2.0">

<xsl:template match="*" mode="#all" />

<xsl:template match="/">

  <xsl:result-document href="#left-pane" method="ixsl:replace-content">
    Application List
    <ul>  
      <xsl:apply-templates select="Links/link" mode="left-pane" />   
    </ul>    
  </xsl:result-document>

</xsl:template>

<xsl:template match="link" mode="left-pane">
  <li>
      <span FilePath="{FilePath}" class="pseudo-a">
        <xsl:value-of select="url"/>
      </span>
  </li>      
</xsl:template>

<xsl:template match="span[@FilePath]" mode="ixsl:onclick">
    <xsl:result-document href="#right-pane" method="ixsl:replace-content">
      <xsl:apply-templates select="document(@FilePath)" mode="right-pane" />
    </xsl:result-document>
</xsl:template>

<xsl:template match="Contents" mode="right-pane">
  <h3><xsl:value-of select="Header"/></h3>
    <p><xsl:value-of select="Summary"/></p>
  <h4>For Support</h4>
    <p>Email: <xsl:value-of select="Support/Email" /></p>
    <p>Phone: <xsl:value-of select="Support/Phone" /></p>
    <p><xsl:value-of select="Support/Text" /></p>
  <xsl:apply-templates select="FAQS" mode="#current" />    
</xsl:template>

<xsl:template match="FAQS" mode="right-pane">
  <h4>FAQS</h4>
  <xsl:apply-templates select="FAQ/(QUESTION | ANSWER)" mode="#current" />    
</xsl:template>

<xsl:template match="QUESTION" mode="right-pane">
    <h5><xsl:value-of select="." /></h5>
</xsl:template>

<xsl:template match="ANSWER" mode="right-pane">
    <p><xsl:value-of select="." /></p>
</xsl:template>

</xsl:transform> 

备注

  1. 要使用XSLT 2.0,您需要下载Saxon CE javascript library
  2. 我没有付出任何努力进入漂亮的商业级css造型。你可以做到。
  3. 纯XSLT解决方案将比涉及ASP.NET或PHP或任何其他类似重量级垃圾的任何替代解决方案高出几个数量级。代码量是微观的。维护起来会更简单,更便宜。