我正在使用文本输出方法.我需要忽略模板中的所有空格.
<xsl:template ...>
text
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我收到输出"文本",但我只需要"文本".
谢谢.
我是XSLT世界的新手,我基本上试图从HERE运行JSON转换
但是如果我使用这种方法:
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource("src\\json\\xml-to-json.xsl"));
transformer.transform(new StreamSource("src\\json\\xmltest.xml"), new StreamResult(new FileOutputStream("birds.out")));
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SystemId Unknown; Line #59; Column #127; Could not find function: if
SystemId Unknown; Line #59; Column #127; Extra illegal tokens: 'then', 'http://json.org/', ':', 'create-node', '(', '$', 'input', ',', 'false', '(', ')', ')', 'else', 'http://json.org/', ':', 'create-simple-node', '(', '$', 'input', ')'
SystemId Unknown; Line #59; Column #127; function token not found.
Run Code Online (Sandbox Code Playgroud)
如果我使用Saxon,我宁愿使用inbuit,因为许可,但只需调用它的主要工作:
String[] args = new String[2];
args[0]="d:\\xmltest.xml";
args[1]="d:\\xml-to-json.xsl";
net.sf.saxon.Transform.main(args);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在Java中正确编码(不调用main),以便我可以存储结果. …
我正在使用.NET Framework 3.5在C#中编写应用程序来实现一系列转换.我正在使用XslCompiledTransform类来执行转换.我想避免在我的XSLT转换中编写一堆for-each语句,所以我想根据属性选择一些数据.我的源数据如下所示.
<Radios>
<Radio name="UHF1">
<GUID protected="true">785A9539-918B-4DCE-A9AA-AC9D6275EA86</GUID>
<DigitalAudioDeviceInstance protected="true">1</DigitalAudioDeviceInstance>
<DigitalAudioDevicePort>2</DigitalAudioDevicePort>
<ACIMLocalInstance protected="true">1</ACIMLocalInstance>
<ACIMLocalPort>2</ACIMLocalPort>
<ACIMSCCInstance protected="true">1</ACIMSCCInstance>
</Radio>
<Radio name="VHF1">
<GUID protected="true">C150EA26-E53E-4366-B4A0-84BF619BFD3A</GUID>
<DigitalAudioDeviceInstance protected="true">2</DigitalAudioDeviceInstance>
<DigitalAudioDevicePort>2</DigitalAudioDevicePort>
<ACIMLocalInstance protected="true">2</ACIMLocalInstance>
<ACIMLocalPort>6</ACIMLocalPort>
<ACIMSCCInstance protected="true">2</ACIMSCCInstance>
</Radio>
</Radios>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下内容来尝试从无线电中引用"ACIMSCCInstance":
<xsl:value-of select="Radios/Radio/ACIMSCCInstance[@name=UHF1]"/>
Run Code Online (Sandbox Code Playgroud)
这不起作用但是请记住,"无线电"不是文档的根,我实际上处于相对路径应该工作的适当级别.只是为了确保我试过这个:
<xsl:value-of select="Radios/Radio/ACIMSCCInstance"/>
Run Code Online (Sandbox Code Playgroud)
这当然给了我列表中第一个无线电的"ACIMSCCInstance"值("1").
我的问题是,为什么路径末端的"[@ name = UHF1]"不能选择名为"UHF1"的收音机.我也试过这个"@ name ='UHF1']"而且没有骰子.
我试图显示按字母顺序排序的数据,以便以相同字母开头的项目位于不同的列中。在开始新列之前,这些列最多可容纳 10 个项目。我可以成功地按字母顺序划分数据并按每列的项目数划分,但我正在努力将这两个组合起来:
按字母顺序划分:
<xsl:template match="/">
<xsl:key name="node-by-first-letter" match="node" use="substring(@email, 1, 1)" />
<div class="scroller-panel">
<xsl:for-each select="msxml:node-set($members)/node[count(. | key('node-by-first-letter', substring(@email, 1, 1))[1]) = 1]">
<xsl:sort select="@email" order="ascending"/>
<xsl:apply-templates select="." mode="group" />
</xsl:for-each></div></xsl:template>
<xsl:template match="node" mode="group">
<div class="column-312 scroller-item people-search-column fade-panel">
<h2>
<xsl:value-of select="Exslt.ExsltStrings:uppercase(substring(@email,1,1))"/>
</h2>
<ul class="stripe-list">
<xsl:apply-templates select="key('node-by-first-letter', substring(@email, 1, 1))" mode="item">
<xsl:sort select="@email" />
</xsl:apply-templates>
</ul>
</div>
</xsl:template>
<xsl:template match="node" mode="item">
<li>
<a href="4.0.1.person.profile.html">
<xsl:value-of select="@email"/>
</a>
</li>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
除以每列的最大项目数:
<xsl:for-each select="msxml:node-set($members)/members/member[position() mod 10 = 1]">
<ul>
<xsl:for-each select=". …Run Code Online (Sandbox Code Playgroud) 我需要放弃使用xsltproc命令行工具在Heroku上进行部署,因为他们并不真正支持它.Nokogiri宝石看起来应该适用于我需要的一切,尽管我无法从HTML中找到代表性的图像.
我的意思是代表性的图像是,/ html/body下的第一个图像在链接中有"://"并且没有"广告".或"广告".要么 "?" 在链接中.是否有Nokogiri函数可以执行此操作,可能返回所有图像的数组,我可以按照我想要的方式过滤它们?
我下载Xalan-Java Version 2.7.1,解压缩,然后设置PATHfor java和CLASSPATHfor xalan:
set path=%PATH%;c:\Program Files\Java\jre6\bin
set classpath=%CLASSPATH%;c:\Xalan\
Run Code Online (Sandbox Code Playgroud)
(我也尝试仅为xalan.jar,xercesImpl.jar,xml-apis.jar设置类路径)
在测试简单的Hello World示例(或任何其他示例)时:
java org.apache.xalan.xslt.Process -in hello.xml -xsl hello.xsl -out hello.html
Run Code Online (Sandbox Code Playgroud)
我总是得到这个:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xalan/xslt
/Process
Caused by: java.lang.ClassNotFoundException: org.apache.xalan.xslt.Process
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.apache.xalan.xslt.Process. Program will exit
Run Code Online (Sandbox Code Playgroud)
问题是什么 ?有人有想法吗?
谢谢.
我是StackOverflow的新用户,因此,如果我无意违反了任何论坛规则,请原谅我。
我正在从Cognos获取XML文档输出,我希望将其用作Crystal报表的输入。但是,Crystal Report所需的XML格式与Cognos输出的XML格式不同。
我正在尝试使用XSLT转换输入XML文档(Cognos),以获取Crystal所需的XML。
设置了上下文之后,下面是来自Cognos的Input XML:
<?xml version="1.0"?>
<dataset>
<metadata>
<item Name="EmpId" />
<item Name="EmpName" />
<item Name="DeptName" />
</metadata>
<data>
<rows>
<row>
<value>1</value>
<value>John</value>
<value>Finance</value>
</row>
<row>
<value>2</value>
<value>Peter</value>
<value>Admin</value>
</row>
</rows>
</data>
Run Code Online (Sandbox Code Playgroud)
Crystal Report所需的XML格式:
<?xml version="1.0"?>
<dataset>
<row>
<EmpId>1</EmpId>
<EmpName>John</EmpName>
<DeptName>Finance</DeptName>
</row>
<row>
<EmpId>2</EmpId>
<EmpName>Peter</EmpName>
<DeptName>Admin</DeptName>
</row>
</dataset>
Run Code Online (Sandbox Code Playgroud)
我在XSLT下方编写了所需的转换:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<dataset>
<xsl:for-each select="./dataset/data/rows/row">
<row>
<xsl:for-each select="/dataset/metadata/item">
<xsl:element name="{@Name}">
<xsl:for-each select="/dataset/data/rows/row/value">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</row>
</xsl:for-each>
</dataset>
</xsl:template> …Run Code Online (Sandbox Code Playgroud) 我希望在每次迭代 for-each 时将变量的值附加到自身,问题是我不确定如何解决这个问题。这是我目前拥有的:
<xsl:variable name="lineQty" select="0" />
<xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
<xsl:value-of select="$lineQty + (xsales:LineNum * xsales:Qty)" />
</xsl:for-each>
<test>
<xsl:value-of select="$lineQty" />
</test>
Run Code Online (Sandbox Code Playgroud)
这只是输出 0
我将其更改为以下内容:
<xsl:variable name="lineQty">
<xsl:for-each select="/*/*/*/*/*/xsales:CustInvoiceTrans">
<xsl:value-of select="xsales:LineNum * xsales:Qty" />
</xsl:for-each>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)
但这输出12345. 这样做的原因是它完成了 1x1、2x1、3x1、4x1、5x1,因为我的 5 行每行的数量都是 1。所以现在需要发生的就是将这些值相加,这可能吗?
我在尝试输出包含&符号(&)的某个XML标记时遇到了一些麻烦.
更具体的是,当我尝试输出以下标签时.我收到一个错误
<fullname>Ben & Jerry</fullname>
Run Code Online (Sandbox Code Playgroud)
然而,使用以下标记可以正常运行
<fullname>Ben and Jerry</fullname>
Run Code Online (Sandbox Code Playgroud)
我用以下代码尝试过它
<xsl:template match="fullname">
<xsl:apply-templates/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我也尝试过
<xsl:template match="fullname">
<xsl:value-of-select="." disable-output-escaping="Yes"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
两者都导致了错误.我如何使它工作的唯一方法是使用像这样的CDATA
<fullname><![CDATA[Ben & Jerry]]></fullname>
Run Code Online (Sandbox Code Playgroud)
但是,我无法控制我收到的XML文件,因此这不是一个可行的选择.我可以在XSLT中做些什么来规避/解决这个问题吗?
谢谢!
我是XSLT的初学者,并且发现我不能只是将数字加到变量中并以任何方式改变它的值.
我有一个XML文档,其中包含我需要添加的数字列表,直到元素与特定属性值匹配,然后打印该数字将其重置为0并继续累加其余部分,直到我再次看到该特定属性.
例如,我有这个XML:
<list>
<entry>
<field type="num" value="189.5" />
</entry>
<entry>
<field type="num" value="1.5" />
</entry>
<entry>
<field type="summary" />
</entry>
<entry>
<field type="num" value="9.5" />
</entry>
<entry>
<field type="num" value="11" />
</entry>
<entry>
<field type="num" value="10" />
</entry>
<entry>
<field type="summary" />
</entry>
</list>
Run Code Online (Sandbox Code Playgroud)
现在我希望我的XSLT打印出来:
189.5
1.5
#191#
9.5
11
10
#30.5#
Run Code Online (Sandbox Code Playgroud)
我已经读过,我可以通过使用sum()和条件来做到这一点.我知道如何使用for-each并相对指向元素,iam也可以通过简单地总结所有类型= num来使用sum(),但是如何仅将第一个num加起来直到type = summary出现,然后仅下一个sum从最后一个类型=摘要到下一个?
我希望这样的事情:
<xsl:for-each select="list/entry">
<xsl:if test="field[@type='summary']">
<!-- we are now at a type=summary element, now sum up -->
#<xsl:value-of select="sum(WHAT_TO_PUT_HERE?)" />#
</xsl:if>
<xsl:if test="field[@type='num']"> …Run Code Online (Sandbox Code Playgroud) 这个问题实际上有些不同.请参阅@ Tomalak的回答以了解OP真正想要的内容.:(
有没有办法在一个数组中的for-each循环期间存储变量/ param,并在另一个模板中使用它,即<xsl:template match="Foundation.Core.Classifier.feature">.classname应存储for-each期间出现的所有值.你会如何在XSLT中实现它?这是我目前的代码.
<xsl:for-each select="Foundation.Core.Class">
<xsl:for-each select="Foundation.Core.ModelElement.name">
<xsl:param name="classname">
<xsl:value-of select="Foundation.Core.ModelElement.name"/>
</xsl:param>
</xsl:for-each>
<xsl:apply-templates select="Foundation.Core.Classifier.feature" />
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
这是classname应该使用参数的模板.
<xsl:template match="Foundation.Core.Classifier.feature">
<xsl:for-each select="Foundation.Core.Attribute">
<owl:DatatypeProperty rdf:ID="{Foundation.Core.ModelElement.name}">
<rdfs:domain rdf:resource="$classname" />
</owl:DatatypeProperty>
</xsl:for-each>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我有一个表示日期的字符串,格式如此
2010-12-03 ="yyyy-mm-dd"
我想使用XSLT并找到一种方法来提取月份并获得其月份缩写.
改造后,它应该是" DEC ",因为12月是第12个月.
谢谢!
我需要解析一些类似下面的块的日志文件.
25 Nov 2010 01:11:13 DEBUG [MSMQListenerService]
Processing Recipient with Email : email@internet.com -
<Envelope>
<Body>
<AddRecipient>
<LIST_ID>123456</LIST_ID>
<CREATED_FROM>1</CREATED_FROM>
<UPDATE_IF_FOUND>true</UPDATE_IF_FOUND>
<ALLOW_HTML>true</ALLOW_HTML>
<COLUMN><NAME>EMAIL</NAME><VALUE>email@internet.com</VALUE></COLUMN>
<COLUMN><NAME>AUM</NAME><VALUE>100</VALUE></COLUMN>
<COLUMN><NAME>CITY</NAME><VALUE>New York</VALUE></COLUMN>
<COLUMN><NAME>COMPANY_PROFILE</NAME><VALUE>Building</VALUE></COLUMN>
<COLUMN><NAME>COMPANY_NAME</NAME><VALUE>Company Name</VALUE></COLUMN>
<COLUMN><NAME>COUNTRY_CODE</NAME><VALUE>US</VALUE></COLUMN>
<COLUMN><NAME>FIRST_NAME</NAME><VALUE>My First Name</VALUE></COLUMN>
<COLUMN><NAME>JOB_FUNCTION</NAME><VALUE>My Job</VALUE></COLUMN>
<COLUMN><NAME>LAST_NAME</NAME><VALUE>My Last Name</VALUE></COLUMN>
<COLUMN><NAME>Plan to Buy</NAME><VALUE>Yes</VALUE></COLUMN>
<COLUMN><NAME>STATE</NAME><VALUE></VALUE>NY</COLUMN>
<COLUMN><NAME>Code VALUE</NAME><VALUE>ABCDE_000000_00_00</VALUE></COLUMN>
<COLUMN><NAME>Code Title</NAME><VALUE><![CDATA[Word%3a+Word+Word+to+Word+Words]]></VALUE></COLUMN>
<COLUMN><NAME>ZIP_CODE</NAME><VALUE>11101</VALUE></COLUMN>
<COLUMN><NAME>Form Date</NAME><VALUE>12%2f01%2f2011</VALUE></COLUMN>
</AddRecipient>
</Body>
</Envelope>
Run Code Online (Sandbox Code Playgroud)
但由于misc文本,我不能简单地应用xsl,或将其转换为xml文档.我认为正则表达式将是最好的解决方案,但我对我的正则表达式技巧非常不稳定.基本上我只需要信封中的内容.正则表达式是最好的方法吗?如果框架中的任何内容可以帮助我,我也有.NET.
谢谢!