我读了一些XSLT示例,发现代码:
<xsl:apply-template select="@*|node()"/>
Run Code Online (Sandbox Code Playgroud)
那是什么意思?
我正在尝试使用XSLT将XML文件转换为dokuwiki使用的标记.这实际上在某种程度上起作用,但XSL文件中的缩进被插入到结果中.目前,我有两个选择:完全放弃这个XSLT,找到另一种从XML转换为dokuwiki标记的方法,或者从XSL文件中删除大约95%的空白,使其难以理解并成为维护的噩梦.
有没有办法在XSL文件中保留缩进而不将所有空格传递给最终文档?
背景:我正在将autodoc工具从静态HTML页面迁移到dokuwiki,因此,只要应用程序团队遇到编写不当的代码,应用程序团队就可以进一步记录服务器团队开发的API.逻辑是为autodoc工具留出每个页面的一部分,并允许在该块之外的任何地方进行注释.我正在使用XSLT,因为我们已经有了从XML转换为XHTML的XSL文件,而且我认为重写XSL比从头开始编写自己的解决方案要快.
编辑:啊,对,愚蠢的我,我忽略了缩进属性.(其他背景说明:我是XSLT的新手.)另一方面,我仍然需要处理新行.Dokuwiki使用管道来区分表列,这意味着表行中的所有数据必须在一行上.有没有办法抑制输出的换行(只是偶尔),所以我可以在一个有点可读的区域为每个表格单元做一些相当复杂的逻辑?
当我使用XML序列化程序序列化a时DateTime,它使用以下格式编写:
<Date>2007-11-14T12:01:00</Date>
Run Code Online (Sandbox Code Playgroud)
当通过XSLT样式表传递它以输出HTML时,我该如何格式化?在大多数情况下,我只需要约会,当我需要时间时,我当然不希望那里有"有趣的T".
我对建议/ 伪代码/解释而不是实际实现感兴趣.
如果节点没有属性,则get/generate String with value of its xpath
情况如果节点具有属性,则迭代通过属性列表并为包括节点的每个属性创建xpath.
忠告?希望你能提供一些有用的英特尔
编辑:
这样做的原因是..我正在用jmeter编写自动化测试,所以对于我需要验证请求实际完成其工作的每个请求,所以我通过使用xpath获取节点值来声明结果.(额外信息 - 不相关)
当请求很小时,手动创建断言并不是问题,但对于较大的请求,它真的很痛苦...(额外信息 - 不相关)
BOUNTY:
我正在寻找Java方法
目标
我的目标是从这个ex xml文件中实现以下目标:
<root>
<elemA>one</elemA>
<elemA attribute1='first' attribute2='second'>two</elemA>
<elemB>three</elemB>
<elemA>four</elemA>
<elemC>
<elemB>five</elemB>
</elemC>
</root>
Run Code Online (Sandbox Code Playgroud)
产生以下内容:
//root[1]/elemA[1]='one'
//root[1]/elemA[2]='two'
//root[1]/elemA[2][@attribute1='first']
//root[1]/elemA[2][@attribute2='second']
//root[1]/elemB[1]='three'
//root[1]/elemA[3]='four'
//root[1]/elemC[1]/elemB[1]='five'
Run Code Online (Sandbox Code Playgroud)
解释:
BOUNTY UPDATE:
我发现这个例子,它没有产生正确的结果,但我看起来像这样:
我有一个要求,我想要if else语句检查一个节点是否有属性或它只有字符串.
例如:节点中的1个具有0 File(s) found,而另一个具有诸如的属性<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='64' filename='AFP_p.tgp' />
下面是两个节点的示例
<product>
<autoIncludeUser>0 File(s) found</autoIncludeUser>
<autoIncludeSystem>
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='64' filename='AFP_p.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='3,879' filename='AnalystsExpressionMacros.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='475' filename='base64Converter.tgp' />
<autoincludesystem_info mdate='08/23/2011' mtime='09:51' ampm='PM' filesize='<DIR>' filename='codePages' />
</autoIncludeSystem>
<autoIncludeStudio>0 File(s) found</autoIncludeStudio>
<externalLibrarySystem>
<externalLibrarySystem_info mdate='08/23/2011' mtime='09:52' ampm='PM' filesize='196,608' filename='AFPtoXML_DP.dll' />
<externalLibrarySystem_info mdate='08/23/2011' mtime='09:52' ampm='PM' filesize='13,259' filename='ASN1toXSDRunner.jar' />
<externalLibrarySystem>
</product>
Run Code Online (Sandbox Code Playgroud)
我将如何确定,如果一个节点只是字符串或attribs和基于我可以得到的值或者String或attrib values分别.
我有一个看起来像这样的XML
<element1>
<element2>
<element3>
<element4>Hello</element4>
<element5>World</element5>
</element3>
<element3>
<element4>Hello2</element4>
<element5>World2</element5>
</element3>
<element3>
<element4>Hello3</element4>
<element5>World3</element5>
</element3>
</element2>
</element1>
Run Code Online (Sandbox Code Playgroud)
我试图使用Xpath得到这样的结果:
Hello.World
Hello2.World2
Hello3.World3
Run Code Online (Sandbox Code Playgroud)
我在下面使用了concat函数但是没有得到正确的结果.
Concat功能:
concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text())
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.World
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到正确的结果?我正在使用XPath与Camel Spring DSL.
编辑:
XQuery,XSLT和SPel中的解决方案也很受欢迎.
编辑
我尝试了字符串连接,但它不起作用:
字符串连接函数:
string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".")
Run Code Online (Sandbox Code Playgroud)
结果我得到了:
Hello.Hello2.Hello3.World.World2.World3
Run Code Online (Sandbox Code Playgroud) 我想将xslt中的字符串值转换为整数值.我使用xslt 1.0,所以我不能使用xslt 2.0中支持的那些功能.请帮忙.
我需要根据某个属性对值进行分组并填充它.
下面提到的是i/p xml,如果你看到有4行用户和id 2,4分是相同的,即HR
虽然产生实际的o/p我需要按分组分组......任何帮助???
I/P XML
<Users>
<User id="2" name="ABC" Division="HR"/>
<User id="3" name="xyz" Division="Admin"/>
<User id="4" name="LMN" Division="Payroll"/>
<User id="5" name="PQR" Division="HR"/>
</Users>
Run Code Online (Sandbox Code Playgroud)
预期结果:我需要根据Division进行分组并填充ie
<AllUsers>
<Division value="HR">
<User>
<id>2</id>
<name>ABC</name>
</User>
<User>
<id>5</id>
<name>PQR</name>
</User>
</Division>
<Division value="ADMIN">
<User>
<id>3</id>
<name>XYZ</name>
</User>
</Division>
<Division value="Payroll">
<User>
<id>4</id>
<name>LMN</name>
</User>
</Division>
</AllUsers>
Run Code Online (Sandbox Code Playgroud) 我知道以下问题是一些初学者,但我需要你的帮助才能理解一个基本概念.
我想首先说我是一名XSLT程序员已经3年了但是我在这里学到了一些新的和相当基础的东西我从来不知道(在我的工作中,任何人都学会了如何单独编程,没有课程参与).
我的问题是:用法是xsl:sequence什么?
我一直在使用xsl:copy-of,以便按原样复制节点,xsl:apply-templates以便修改我选择的节点和value-of简单的文本.
我从来没有必要使用xsl:sequence.如果有人可以向我展示一个xsl:sequence使用的例子,我会很感激,如果没有我上面提到的那些,这是优选的或不可能实现的.
还有一件事,我读过有关xsl:sequence课程的定义,但我无法推断它是如何有用的.