现在的位置: 首页 > 专题 > 机器人 > Robotics Studio > 设计中心 > 文档 > 专题 > 机器人 > 正文

Robotics Studio学习教程:第二十九天——使用XSLT来显示DDS Service State

2014年05月18日 Robotics Studio, 文档, 机器人 ⁄ 转载:原文链接 ⁄ 共 3239字 ⁄ 字号 暂无评论 ⁄ 阅读 1,631 次
Robotics Studio学习教程

Robotics Studio学习教程

继之前分享的一篇《Robotics Studio学习教程:第二十八天——Pursuit Camera》, 我们将继续分享下一篇《Robotics Studio学习教程:第二十九天——使用XSLT来显示DDS Service State》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。

 

[Robotics Studio] 使用 xslt 来显示 DSS Service State -- Day29

 

很多天没有继续写了, 实在是因为本来想写的东西太庞杂, 依照我的进度, 我看可能要等半年才能写完走迷宫 XD。可是我还是很想要奖品, 所以赶快先拿两篇简单的截稿吧.

这样大家也比较容易看得懂, 如果我写出连自己都看不懂的东西恐怕不是件好事...

反正日后还是可以继续写, 所以我不懂的东西就等我搞懂再说 ^ ^

啊, 快要离题了, 今天要来写的是 XSLT Hello World ...不是我要混, 而是这个 "Hello World" 就是表示很简单的意思.

首先先用 VS 2008 产生一个 DSS Service, 名称就输入 XsltHelloWorld, 接着我们修改 XsltHelloWorldTypes.cs 当中的 XsltHelloWorldState class, 加入一个 Msg , 如下:

  1.  /// <summary>
  2.  /// XsltHelloWorld state
  3.  /// </summary>
  4.  [DataContract]
  5.  public class XsltHelloWorldState
  6.  {
  7.      [DataMember]
  8.      public string Msg { get; set; }
  9.  }

 

然后再去 XsltHelloWorld.cs 当中的 Start() 修改如下:

  1.  /// <summary>
  2.  /// Service start
  3.  /// </summary>
  4.  protected override void Start()
  5.  {
  6.      //
  7.      // Add service specific initialization here
  8.      //
  9.      _state.Msg = "Hello World";

  10.      base.Start();
  11.  }

 

这样我们就拥有一个简单的 Hello World Service (以上就是 Day8 的内容, 老师都有说, 常复习才不会忘记)

接下来, 执行它, 然后打开 Browser, 连到 http://localhost:50000

你可以看到:

clip_image002

点选左边的 Service Directory, 你可以看到我们刚刚写的 xslthelloworld DSS Service:

clip_image004

(以上就是 Day 24...)

点了那个 xslthelloworld , 你可以看到:

clip_image006

这就是我们刚刚写的 XsltHelloWorld 的 Get DSSP 所传回来的结果, 表示了这个 DSS Service 的 State (XsltHelloWorldState), (以上是Day 18 )

好了, 复习完毕, 我们所要做的, 就是透过 Xslt (扩展样式表单转换语言(Extensible Stylesheet Language Transformations)), 将 XsltHelloWorld 的 State 从 XML 转为容易阅读的 Html.

先在专案新增一个 XsltHelloWorld.xslt 的档案:

clip_image008

把建置动作改为 "内嵌资源" (Embedded Resources)

clip_image010

而该 xslt 的内容如下 (我把批注写在里面) :

  1.   <?xml version="1.0" encoding="UTF-8" ?>
  2.   <!-- 定义 stylesheet
  3.   主要是 xmlns:myhello 这行,
  4.   表示定义了一个 xml name space, 名称为 myhello,
  5.   其内容你可以在 xlstHelloWordTypes.cs 的 Constract class 当中的 Identifier 找到:
  6.   http://schemas.tempuri.org/2009/02/xslthelloworld.html
  7.   -->
  8.   <xsl:stylesheet version="1.0"
  9.                   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  10.                   xmlns:myhello="http://schemas.tempuri.org/2009/02/xslthelloworld.html">

  11.     <!-- 表示输出格式为 html -->
  12.     <xsl:output method="html"/>

  13.     <!-- 定义一个 template for XsltHelloWorldState -->
  14.     <xsl:template match="/myhello:XsltHelloWorldState">
  15.       <html>
  16.         <head>
  17.           <title>Xslt Hello World State</title>
  18.         </head>
  19.         <body>
  20.           <h1>Xslt Hello World State</h1>
  21.           Service State:<br/>
  22.           <!-- 将 Msg 的内容输出 -->
  23.           Message : <xsl:value-of select="myhello:Msg"/> <br/>
  24.         </body>
  25.       </html>
  26.     </xsl:template>
  27.   </xsl:stylesheet>

 

最后, 我们要实做 HttpGet ,  在 XsltHelloWorldTypes.cs 当中加上 using Microsoft.Dss.Core.DsspHttp;
并且修改 XsltHelloWorldOperations 如下:

  1.  /// <summary>
  2.  /// XsltHelloWorld main operations port
  3.  /// </summary>
  4.  [ServicePort]
  5.  public class XsltHelloWorldOperations : PortSet<DsspDefaultLookup, DsspDefaultDrop, Get, HttpGet, Subscribe>
  6.   {
  7.   }

 

然后在 XsltHelloWorld.cs 加入using Microsoft.Dss.Core.DsspHttp; using System.Net; 并且在 XsltHelloWorldService 当中加入

  1.   [EmbeddedResource("XsltHelloWorld.XsltHelloWorld.xslt")]
  2.   string _transform = null;

  3.   [ServiceHandler(ServiceHandlerBehavior.Exclusive)]
  4.   public IEnumerator<ITask> HttpGetHandler(HttpGet get)
  5.   {
  6.       get.ResponsePort.Post(new HttpResponseType(HttpStatusCode.OK, _state, _transform));
  7.       yield break;
  8.   }

 

这样子, 再执行一次, 这次的 Browser 内容就会变成:

clip_image012

以上, 就是利用 Xslt 将 HttpGet 输出的内容转为 html 的方法.

 

让我们继续一下章教程:

《Robotics Studio学习教程:第三十天——用自己的程序启动DSS环境》

fgx

分享到:

Wopus问答

×