我有一系列相互馈送的XSL 2.0样式表,即样式表A的输出馈送B馈送C.
这样做最有效的方法是什么?重新提出的问题是:如何有效地将一个转换的输出路由到另一个转换.
这是我的第一次尝试:
@Override
public void transform(Source data, Result out) throws TransformerException{
for(Transformer autobot : autobots){
if(autobots.indexOf(autobot) != (autobots.size()-1)){
log.debug("Transforming prelim stylesheet...");
data = transform(autobot,data);
}else{
log.debug("Transforming final stylesheet...");
autobot.transform(data, out);
}
}
}
private Source transform(Transformer autobot, Source data) throws TransformerException{
DOMResult result = new DOMResult();
autobot.transform(data, result);
Node node = result.getNode();
return new DOMSource(node);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用DOM来处理转换之间,虽然它很方便,但它并不是非最佳性能.
是否有任何简单的方法可以说,将SAXResult路由到SAXSource?StAX解决方案将是另一种选择.
我知道像XProc这样的项目,如果你还没有看过,这是非常酷的,但我不想投资整个框架.
片段是否可以在Visual Studio代码中插入动态计算的完成或片段?
我想要一个用于插入各种格式的日期和时间字符串的代码段.例如,如果键入date,将自动扩展ISO格式的当前日期.
Sublime Text中有一个工具可以通过类中的on_query_completions方法在python API中执行此操作EventListener.那里的实现非常简单:
def on_query_completions(self, view, prefix, locations):
if prefix == 'date':
val = datetime.now().strftime('%Y-%m-%d')
return [(prefix, prefix, val)] if val else []
Run Code Online (Sandbox Code Playgroud)
我已阅读有关用户定义代码段的文档,但似乎只能插入预定义文本,其中包含用户填写的制表位和变量.
如果使用代码段API公开的功能无法实现这一点,我是否可以通过较低级别的插件/扩展API实现类似的功能?
我确实知道有一个名为Insert Date and Time的现有扩展,但这可以通过命令托盘而不是动态扩展来实现.
我有Map[String,String]配置值.我想提取一系列密钥,并提供有意义的错误消息,如果缺少任何密钥.例如:
val a = Map("url"->"http://example.com", "user"->"bob", "password"->"12345")
Run Code Online (Sandbox Code Playgroud)
假设我想将其转换为案例类:
case class HttpConnectionParams(url:String, user:String, password: String)
Run Code Online (Sandbox Code Playgroud)
现在,我可以简单地使用for循环来提取值:
for(url <- a.get("url");
user <- a.get("user");
password <- a.get("password")) yield {
HttpConnectionParams(url,user,password)
}
Run Code Online (Sandbox Code Playgroud)
得到一个Option[HttpConnectionParams].这很干净,除非我得到一个None然后我不知道缺少什么.我想提供这些信息.
输入scalaz.我使用的是7.1.3版本.
从我能够组合起来(这里有一个很好的参考)我可以使用析取:
for(url <- a.get("url") \/> "Url must be supplied";
user <- a.get("user") \/> "Username must be supplied";
password <- a.get("password") \/> "Password must be supplied") yield {
HttpConnectionParams(url,user,password)
}
Run Code Online (Sandbox Code Playgroud)
这很好,因为现在我收到一条错误信息,但这是铁路导向的,因为它在第一次失败时停止.如果我想获得所有错误怎么办?让我们使用验证和applicative builder(又名"| @ |"):
val result = a.get("url").toSuccess("Url must …Run Code Online (Sandbox Code Playgroud) 我最近参加了一个初学者Scala聚会,我们正在谈论方法和功能之间的区别(这里也进行了深入讨论).
例如:
scala> val one = 1
one: Int = 1
scala> val addOne = (x: Int) => x + 1
addOne: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)
这表明val不仅可以具有整数类型,而且可以具有函数类型.我们可以在scala repl中看到类型:
scala> :type addOne
Int => Int
Run Code Online (Sandbox Code Playgroud)
我们还可以在对象和类中定义方法:
scala> object Foo {
| def timesTwo(op: Int) = op * 2
| }
defined module Foo
Run Code Online (Sandbox Code Playgroud)
虽然方法没有类型(但是具有类型签名),我们可以将其提升为函数以查看它是什么:
scala> :type Foo.timesTwo
<console>:9: error: missing arguments for method timesTwo in object Foo;
follow this method with `_' if you want to treat …Run Code Online (Sandbox Code Playgroud) 我想将一个消息队列暴露给互联网,以便客户端应用程序可以与我们的一些后端服务进行通信.
由于安全原因,我不想直接公开jms端点.此外,普通的HTTP传输可以避免将jms插件分发到异构客户端应用程序(.net,java,javascript)的需要.
我看了一下ActiveMQ的"内置"REST接口:
http://activemq.apache.org/rest.html
但在测试中,我发现该演示不可靠(即"我的消息在哪里?").此外,关于如何将演示拉入"真正的"实现,没有详细记录.
由于这听起来像企业集成模式中的经典"桥"模式,我看了主要的开源ESB/SOA集成引擎:
在这三个中,最清晰的文档似乎是ServiceMix,它提供了一个In-only消息模式,我需要POST和GET消息.
不幸的是,对于评估条款,我似乎不得不深入研究每个实现和配置.我意识到开箱即用的设置可能太多了,但我宁愿不学习所有这三个,只考虑哪一个最符合我的需求.所以...
是否有解释Control.BeginInvoke()不执行它传递的委托?
我们在Winforms应用程序中采用了以下模式,以便在UI线程上安全地执行UI相关工作:
private Control hiddenControl = new Control();
private void uiMethod()
{
MethodInvoker uiDelegate = new MethodInvoker(delegate()
{
Logging.writeLine("Start of uiDelegate");
//ui releated operations
childDialog = new ChildDialog();
childDialow.show();
Logging.writeLine("End of uiDelegate");
});
if (hiddenControl.InvokeRequired)
{
Logging.writeLine("Start of InvokeRequired block");
hiddenControl.BeginInvoke(uiDelegate);
Logging.writeLine("End of InvokeRequired block");
}
else
{
uiDelegate();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们显式创建一个控件"hiddenControl",以便在UI线程上运行委托.我们从不调用endInvoke,因为它显然不是 Control.BeginInvoke所必需的,我们永远不需要返回值,因为我们的方法只是操纵UI,无论如何.
虽然非常冗长,这种格局似乎是一个比较 好 接受的 解决方案.然而,有一些证据表明即使这种模式在所有情况下都不能很好地发挥作用.
我不排除应用程序错误并指责WinForms.毕竟,选择可能不会破碎.然而,我无法解释为什么代表似乎根本没有参与竞选.
在我们的例子中,我们有时会观察到"开始uiDelegate"日志消息从未在某些线程场景中执行,即使"Start of InvokeReqiured block"和"End of InvokeRequired block"成功执行.
复制此行为非常困难,因为我们的应用程序是作为DLL提供的; 我们的客户在自己的应用程序中运行它.因此,我们无法保证可以调用这些方法的方式或方式.
我们排除了UI线程饥饿,因为观察到UI没有锁定.据推测,如果UI正在更新,则消息泵可操作并可用于从消息队列中提取消息并执行其委托. …
我正在使用sbt-izpack来构建安装程序。好像有一个错误,其中包文件名的变量未正确引用。我希望传递一个变量,以便主jar正确包装为:
variables in IzPack += ("artifactName", artifactFileName.value )
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何获取主工件的路径字符串。该文档说,我可以在地图包,并获得(Artifact, File)对像这样:
val artifactFileName = settingKey[String]("My task.")
artifactFileName := {
val (art, file) = packagedArtifact.in(Compile, packageBin).value
println("Artifact definition: " + art)
println("Packaged file: " + file.getAbsolutePath)
file.getAbsolutePath
}
Run Code Online (Sandbox Code Playgroud)
但是sbt对此抱怨A setting cannot depend on a task。
有没有一种方法可以某种方式获取主装配的路径而无需首先生成它(在任务中),以便可以通过设置将其传递?
或者,是否有某种方式可以更新任务中提供给izpack的设置?