小编Pot*_*eer的帖子

将XML转换为纯文本 - 我应该如何忽略/处理XSLT中的空格?

我正在尝试使用XSLT将XML文件转换为dokuwiki使用的标记.这实际上在某种程度上起作用,但XSL文件中的缩进被插入到结果中.目前,我有两个选择:完全放弃这个XSLT,找到另一种从XML转换为dokuwiki标记的方法,或者从XSL文件中删除大约95%的空白,使其难以理解并成为维护的噩梦.

有没有办法在XSL文件中保留缩进而不将所有空格传递给最终文档?

背景:我正在将autodoc工具从静态HTML页面迁移到dokuwiki,因此,只要应用程序团队遇到编写不当的代码,应用程序团队就可以进一步记录服务器团队开发的API.逻辑是为autodoc工具留出每个页面的一部分,并允许在该块之外的任何地方进行注释.我正在使用XSLT,因为我们已经有了从XML转换为XHTML的XSL文件,而且我认为重写XSL比从头开始编写自己的解决方案要快.

编辑:啊,对,愚蠢的我,我忽略了缩进属性.(其他背景说明:我是XSLT的新手.)另一方面,我仍然需要处理新行.Dokuwiki使用管道来区分表列,这意味着表行中的所有数据必须在一行上.有没有办法抑制输出的换行(只是偶尔),所以我可以在一个有点可读的区域为每个表格单元做一些相当复杂的逻辑?

xml xslt whitespace dokuwiki

36
推荐指数
1
解决办法
3万
查看次数

如何在命令行powershell params中转换&符号,分号和花括号?

我正在使用powershell脚本生成带有数据库密码等的配置文件.这个脚本的正常用法是生成并使用密码,但是稍等片刻,我需要访问其他开发人员的数据库,因此我需要将密码传递给powershell脚本.

问题是密码是乱码,包括&符号,分号和花括号.我怎样才能将它传递给powershell的命令行调用?(这个答案另一个答案是有帮助的,但对分号和花括号没有帮助.)

这是我尝试过的:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:错误消息:不允许使用&符号.&运营商留作将来使用; 用双引号("&")包装&符号以将其作为字符串的一部分传递.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:执行$ password的写主机只会将字符串赋予分号.另外,-otherparam有默认值,而不是我传入命令行的值.

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:write-host $ password现在打印到报价前的第一个反引号.是的,它会输出反引号,这似乎表明一切都在解析所有错误.哦,脚本中调用的其他函数之一引发了一个我以前没见过的异常​​(异常调用带有"4"参数的"AcquireToken":"authentication_canceled:用户取消认证"),这表明该参数解析完全以一种新的迷人方式进行了解析.这是写入主机$密码产生的:

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:write-host $ password现在打印到报价前的第一个反引号.第二个参数处于默认状态.(即,与上次相同的结果.)在正面,上一个例子中抛出的异常没有出现.

那么如何从Windows命令行将任意ASCII字符串传递给powershell字符串参数?或者至少,我如何逃脱分号,&符号和花括号?

parameters powershell cmd

18
推荐指数
2
解决办法
3万
查看次数

如何在运行之前更新当前脚本?

我们有一些PowerShell脚本存在于网络共享A上,这些脚本的最新版本位于只读网络共享B上.只读共享是构建系统的输出,它在路径中具有内部版本号.部分是出于习惯,部分原因是脚本必须在磁盘上创建文件,但主要是因为路径是可预测的,我们在执行它们之前将PowerShell脚本复制到网络共享A. 问题是我们并不总是将脚本复制到网络共享A,所以有时这些脚本已经过时了.

我正在尝试创建一个脚本来更新网络共享A上的PowerShell脚本(通过从共享B复制最新版本),然后执行这些最新脚本.现在,我的想法是创建一个小脚本,从共享B中获取最新脚本,将其复制到共享A,然后在共享A上执行该脚本.

是否可以自行更新脚本? 即,我可以拥有一个脚本(存在于共享A上)而不是拥有两个脚本,它可以将较新版本本身从共享B复制到共享A,然后重新启动自身的执行?(我会提出一些关于文件创建日期的逻辑,这样在第一次执行时,它会自行更新,在第二次执行时,它将运行脚本的实际内容.)

powershell

5
推荐指数
1
解决办法
2264
查看次数

如何获得没有具体类的深层嵌套命名空间的别名?

我有一个typings 文件,里面塞满了深度嵌套的命名空间,由一堆C# 类生成。(这个类型文件已经被围绕内部模块构建的其他代码使用。我正在消除其他代码,但需要一段时间,我有一些代码需要立即运行。)

打字文件如下所示:

declare namespace Thing.Stuff.WhosOnFirst.WhatsOnSecond {
    export interface IDontKnowsOnThird {
        ... lots of interfaces, no classes. In short, *nothing* that turns into JavaScript.
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,使用起来非常尴尬:

public findShortStop(
    thirdBase: Thing.Stuff.WhosOnFirst.WhatsOnSecond.IDontKnowsOnThird, 
    pitcher: Thing.Stuff.WhosOnFirst.WhatsOnSecond.Tomorrow
) {
    ... 
}
Run Code Online (Sandbox Code Playgroud)

所以我想使用 import 语句作为别名。巧合的是,我总是能够摆脱这样的陈述,因为“事物”实际上存在于我的作品中:

import Stuff = Thing.Stuff;
Run Code Online (Sandbox Code Playgroud)

但事实证明,我无法使用深度嵌套的类来做到这一点:

import WhatsOnSecond = Thing.Stuff.WhosOnFirst.WhatsOnSecond;
let baseman: WhatsOnSecond.IDontKnowsOnThird = {};
Run Code Online (Sandbox Code Playgroud)

上面的代码生成如下所示的JavaScript

WhatsOnSecond = Thing.Stuff.WhosOnFirst.WhatsOnSecond;
var baseman = {};
Run Code Online (Sandbox Code Playgroud)

这是一个大问题:这是显示在控制台中的错误。

Uncaught (in promise) Error: (SystemJS) TypeError: Cannot read property 'WhosOnFirst' of undefined …
Run Code Online (Sandbox Code Playgroud)

typing typescript

3
推荐指数
2
解决办法
1196
查看次数

标签 统计

powershell ×2

cmd ×1

dokuwiki ×1

parameters ×1

typescript ×1

typing ×1

whitespace ×1

xml ×1

xslt ×1