我目前正在研究一些脚本,这些脚本可以自动化很多东西并且中等大小.我已经开始关注某些事情,使我的脚本具有通用性和可移植性,如:
我最感兴趣的是知道是否有任何标准的脚本技术和指南,旨在使脚本开发人员生活简单.我在perl和powershell上工作,所以更受欢迎和赞赏的是更广泛的建议.
在此先感谢您的帮助.
steeluser
我是XSL的新手,并且正在从头开始解决问题。
我有一个包含以下结构的源XML文件:
<root>
<Header>
</Header>
<DetailRecord>
<CustomerNumber>1</CustomerNumber>
<DetailSubRecord>
<Address>London</Address>
</DetailSubRecord>
<DetailSubRecord>
<Address>Hull</Address>
</DetailSubRecord>
</DetailRecord>
<DetailRecord>
<CustomerNumber>2</CustomerNumber>
<DetailSubRecord>
<Address>Birmingham</Address>
</DetailSubRecord>
<DetailSubRecord>
<Address>Manchester</Address>
</DetailSubRecord>
</DetailRecord>
<Footer>
</Footer>
</root>
Run Code Online (Sandbox Code Playgroud)
其中有<DetailRecord>多个<DetailSubRecord>s ,其中有多个s。
我已经设法将一个XSL放到一个平面文件中,该XSL将一个嵌套的多个DetailRecords集输出到一个平面文件中,但是我一直不知道如何在XSL中引用地址记录的第二个嵌套级别。
到目前为止,这是我的XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="text"/>
<xsl:variable name="spaces" select="' '"/>
<xsl:variable name="newline">
<xsl:text> </xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:value-of select="root/Header/HeaderField"/>
<xsl:copy-of select="$newline"/>
<xsl:for-each select="root/DetailRecord">
<xsl:value-of select="CustomerNumber"/>
<xsl:copy-of select="$newline"/>
</xsl:for-each>
Trailer - recordCount - <xsl:value-of select="count(root/DetailRecord)"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud) 我有这个JRuby 工作代码(从Keith的博客中窃取),它包装了SAXON xslt处理器API.
现在,我想知道我是否可以,如何在Ruby框架中包装相同的API?
请告诉我这个问题是否无意义或是否可以某种方式改进.
这是所需API的java doc参考.
这是我正在使用的JRuby代码:
require 'java'
module JXslt
include_class "javax.xml.transform.TransformerFactory"
include_class "javax.xml.transform.Transformer"
include_class "javax.xml.transform.stream.StreamSource"
include_class "javax.xml.transform.stream.StreamResult"
include_class "java.lang.System"
class XsltProcessor
def transform(xslt,infile,outfile)
transformer = @tf.newTransformer(StreamSource.new(xslt))
transformer.transform(StreamSource.new(infile), StreamResult.new(outfile))
end
end # XsltProcessor
class Saxon < XsltProcessor
TRANSFORMER_FACTORY_IMPL = "net.sf.saxon.TransformerFactoryImpl"
def initialize
System.setProperty("javax.xml.transform.TransformerFactory", TRANSFORMER_FACTORY_IMPL)
@tf = TransformerFactory.newInstance
end
end
end
Run Code Online (Sandbox Code Playgroud) 我有一个xml数据,如下所示.
<Roll NO="4620" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3" ></Roll>
<Roll NO="4630" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3"></Roll>
Run Code Online (Sandbox Code Playgroud)
我想迭代遍历属性而不使用XSLT指定名称.有办法吗?
我有一种感觉,这个问题很简单,但是自从我做了任何xslt以来可能有多年,所以也许有人可以提供帮助?
我有一块由.net类DataContractSerializer生成的xml,我需要使用xslt从这个xml中提取数据,最后得到一些html.对我来说复杂的事情是命名空间的大量使用......
xml的片段如下所示:
<FundDeal xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Deal">
<Id xmlns="http://schemas.datacontract.org/2004/07/Guide.BusinessObjects.Deal">DEAL12345</Id>
<Account xmlns:d2p1="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
<d2p1:AlternateId i:nil="true"/>
<d2p1:Designation>XXX</d2p1:Designation>
<d2p1:Name>QWERTY</d2p1:Name>
<d2p1:Number>12345678</d2p1:Number>
<d2p1:Status i:nil="true"/>
</Account>
<Agent xmlns:d2p1="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
<d2p1:Id>54321</d2p1:Id>
<d2p1:Name>ASDFG</d2p1:Name>
<d2p1:Status>Active</d2p1:Status>
</Agent>
....
</FundDeal>
Run Code Online (Sandbox Code Playgroud)
现在,我需要通过样式表来转换这个xml,并且发现它非常艰难.我认识到xsl需要它自己对所涉及的命名空间的引用,并且可以使用以下xsl轻松地提取上面的Deal Id之类的内容:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:grbd="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Deal"
xmlns:gbd="http://schemas.datacontract.org/2004/07/Guide.BusinessObjects.Deal"
xmlns:grba="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
<xsl:output indent="yes" omit-xml-declaration="yes" method="html"/>
<xsl:template match="/">
<html>
<head>
<!-- some styles here -->
</head>
<body>
<table cellpadding="5" cellspacing="5" border="0">
<tr>
<td class="SectionTitle" colspan="2">
<xsl:text>Deal Cancellation Notification - </xsl:text>
<xsl:value-of select="//ggbd:Id"/>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
但我正在努力阅读诸如帐户名之类的内容,因为似乎有多个名称空间正在进行中.
任何人都可以告诉我访问的xpath(a)帐户名称,以及(b)代理商名称?我认为看到如何访问这些将可能允许我访问我需要的一切.
非常感谢,皮特
所以我正在写一个PowerShell脚本来安装我办公室里的所有打印机.
但首先,我希望它打开设备和打印机文件夹.然后,在安装所有打印机之后,我希望它关闭该文件夹.
当我进入控制面板时,我可以在桌面上创建设备和打印机的快捷方式.lnk指向"控制面板\硬件和声音\设备和打印机".
有没有人对如何做到这一点有任何想法?
我有这个哈希
hasha = {"a" => "b","a_a" => {"x_y" => "sreeraj","a_b" => "hereIam"}}
Run Code Online (Sandbox Code Playgroud)
我需要改变它
hasha = {"a" => "b","a-a" => {"x-y" => "sreeraj","a-b" => "hereIam"}}
Run Code Online (Sandbox Code Playgroud)
即我需要将包含"_"(下划线)的所有键更改为"-"(减号).我怎样才能做到这一点?