
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 , 如下:
- /// <summary>
- /// XsltHelloWorld state
- /// </summary>
- [DataContract]
- public class XsltHelloWorldState
- {
- [DataMember]
- public string Msg { get; set; }
- }
然后再去 XsltHelloWorld.cs 当中的 Start() 修改如下:
- /// <summary>
- /// Service start
- /// </summary>
- protected override void Start()
- {
- //
- // Add service specific initialization here
- //
- _state.Msg = "Hello World";
- base.Start();
- }
这样我们就拥有一个简单的 Hello World Service (以上就是 Day8 的内容, 老师都有说, 常复习才不会忘记)
接下来, 执行它, 然后打开 Browser, 连到 http://localhost:50000
你可以看到:
点选左边的 Service Directory, 你可以看到我们刚刚写的 xslthelloworld DSS Service:
(以上就是 Day 24...)
点了那个 xslthelloworld , 你可以看到:
这就是我们刚刚写的 XsltHelloWorld 的 Get DSSP 所传回来的结果, 表示了这个 DSS Service 的 State (XsltHelloWorldState), (以上是Day 18 )
好了, 复习完毕, 我们所要做的, 就是透过 Xslt (扩展样式表单转换语言(Extensible Stylesheet Language Transformations)), 将 XsltHelloWorld 的 State 从 XML 转为容易阅读的 Html.
先在专案新增一个 XsltHelloWorld.xslt 的档案:
把建置动作改为 "内嵌资源" (Embedded Resources)
而该 xslt 的内容如下 (我把批注写在里面) :
- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- 定义 stylesheet
- 主要是 xmlns:myhello 这行,
- 表示定义了一个 xml name space, 名称为 myhello,
- 其内容你可以在 xlstHelloWordTypes.cs 的 Constract class 当中的 Identifier 找到:
- http://schemas.tempuri.org/2009/02/xslthelloworld.html
- -->
- <xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:myhello="http://schemas.tempuri.org/2009/02/xslthelloworld.html">
- <!-- 表示输出格式为 html -->
- <xsl:output method="html"/>
- <!-- 定义一个 template for XsltHelloWorldState -->
- <xsl:template match="/myhello:XsltHelloWorldState">
- <html>
- <head>
- <title>Xslt Hello World State</title>
- </head>
- <body>
- <h1>Xslt Hello World State</h1>
- Service State:<br/>
- <!-- 将 Msg 的内容输出 -->
- Message : <xsl:value-of select="myhello:Msg"/> <br/>
- </body>
- </html>
- </xsl:template>
- </xsl:stylesheet>
最后, 我们要实做 HttpGet , 在 XsltHelloWorldTypes.cs 当中加上 using Microsoft.Dss.Core.DsspHttp;
并且修改 XsltHelloWorldOperations 如下:
- /// <summary>
- /// XsltHelloWorld main operations port
- /// </summary>
- [ServicePort]
- public class XsltHelloWorldOperations : PortSet<DsspDefaultLookup, DsspDefaultDrop, Get, HttpGet, Subscribe>
- {
- }
然后在 XsltHelloWorld.cs 加入using Microsoft.Dss.Core.DsspHttp; using System.Net; 并且在 XsltHelloWorldService 当中加入
- [EmbeddedResource("XsltHelloWorld.XsltHelloWorld.xslt")]
- string _transform = null;
- [ServiceHandler(ServiceHandlerBehavior.Exclusive)]
- public IEnumerator<ITask> HttpGetHandler(HttpGet get)
- {
- get.ResponsePort.Post(new HttpResponseType(HttpStatusCode.OK, _state, _transform));
- yield break;
- }
这样子, 再执行一次, 这次的 Browser 内容就会变成:
以上, 就是利用 Xslt 将 HttpGet 输出的内容转为 html 的方法.
让我们继续一下章教程:
《Robotics Studio学习教程:第三十天——用自己的程序启动DSS环境》