xslt-1.0 相关问题

将此标记用于特定于XSL转换版本1.0的问题,而不是其他版本。

xsl:元素不想接受来自属性值的字符串

我正在尝试将元素属性值转换为标签(名称)。例如,一个 到一个 。神秘的是,这根本不可能发生,我明白......

回答 1 投票 0

XML 未按 XSLT 中的预期形成

我正在使用以下 XSLT 来形成 XML,并且代码工作正常,但我希望将此代码包装在一个条件下。 在下面的 XML 中,因为 S_HL/D_735='T' 只出现一次,这就是我

回答 1 投票 0

需要在 XSLT 1.0 中创建一个带参数的函数

需要一些帮助来创建一个带参数的函数,并且可以在我的模板中使用。尝试了很多事情但没有任何结果。下面是我的示例代码: 在创建带参数的函数时需要一些帮助,并且可以在我的模板中使用该函数。尝试了很多事情但没有任何结果。以下是我的示例代码: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:math="http://exslt.org/math" xmlns:func="http://exslt.org/functions" xmlns:my="http://exslt.org/my" exclude-result-prefixes="my" extension-element-prefixes="my math func"> <xsl:output indent="yes" method="xml" /> <xsl:variable name="functionTest11"> <xsl:value-of select="my:calXY('aa')" /> </xsl:variable> <xsl:template match="/"> <svg xmlns="http://www.w3.org/2000/svg"> <xsl:variable name="functionTest22"> <xsl:value-of select="my:calXY" /> </xsl:variable> <xsl:comment>functionTest <xsl:copy-of select="$functionTest22" /></xsl:comment> </svg> </xsl:template> <func:function name="my:calXY"> <xsl:comment>functionHello </xsl:comment> <xsl:param name="string1" select="''"/> <func:result> <xsl:value-of select="concat(10,'|',10)" /> </func:result> </func:function> </xsl:stylesheet> 我无法方便地访问(据我所知)Xalan,它似乎是您正在使用的 XSLT 处理器。所以我无法测试有关您问题根源的任何猜想。 但是,如果在第一个(也是唯一的)xsl:comment之前放置像xsl:param这样的输出指令是正确的,我会大吃一惊。 (令我惊讶的是,您没有报告来自样式表编译器的任何错误消息。但是从您引用的错误消息中可以清楚地看出,Xalan 尚未成功编译该函数。)尚不清楚您想要通过让函数来完成什么返回注释节点和字符串值“10|10”,但这可能不是实现它的方法。 假设 xsl:comment 指令试图验证该函数实际上已被评估,我会尝试类似的事情 <func:function name="my:calXY"> <xsl:param name="string1" select="''"/> <func:result select="concat(10,'|',10)" /> </ [在这个答案的早期版本中,我推测这里不需要 func:result;我的错误。看来确实需要。] 您要求提供完整的样式表。使用 xsltproc 运行时,以下样式表按预期运行。 (正如我上面指出的,我没有便捷的方法来运行 Xalan。) <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:func="http://exslt.org/functions" xmlns:my="http://example.org/my" exclude-result-prefixes="my" extension-element-prefixes="func"> <xsl:output indent="yes" method="xml" /> <xsl:template match="/"> <xsl:message>Result is <xsl:value-of select="my:dummy('foo')"/></xsl:message> <output> <test><xsl:value-of select="my:dummy('bar')"/></test> <test><xsl:value-of select="my:dummy('baz')"/></test> </output> </xsl:template> <func:function name="my:dummy"> <xsl:param name="s" select="'foo'"/> <func:result select="concat($s,'|',$s)" /> </func:function> </xsl:stylesheet>

回答 1 投票 0

我想删除元素之间的所有回车符和换行符。我正在使用 Microsoft Visual Studio。所以,这是一个1.0问题

输入XML: 第一 输入XML: <?xml version="1.0" encoding="utf-8"?> <section> <table> <tbody> <tr> <td> <datapoint>First</datapoint> </td> </tr> <tr> <td> <datapoint>Second</datapoint> </td> </tr> </tbody> </table> </section> 这是我尝试过的: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxml xsl"> <xsl:strip-space elements="*" /> <xsl:preserve-space elements="datapoint" /> <xsl:output indent="yes" method="xml" version="1.0" omit-xml-declaration="no"/> <xsl:template match="text()[contains(.,'&#10;') or contains(.,'&#13;')]"/> <!-- Identity template --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 这就是我所期待的: 预期结果:(一行) <?xml version="1.0" encoding="utf-8"?><section><table><tbody><tr><td><datapoint>First</datapoint></td></tr><tr><td><datapoint>Second</datapoint></td></tr></tbody></table></section> 实际结果:(无变化) <?xml version="1.0" encoding="utf-8"?> <section> <table> <tbody> <tr> <td> <datapoint>First</datapoint> </td> </tr> <tr> <td> <datapoint>Second</datapoint> </td> </tr> </tbody> </table> </section> 我想知道我是否要删除换行符和回车符,但 VS 正在将它们放回原处。 怎么样: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

如何将“block”元素分组到“<p class="p">”元素中?

我想将 元素分组到 元素内部。如果 follow-sibling[1] 是 元素并且 我想将 <block> 元素分组到 <p class="p"> 元素内部。如果 <p class="p"> follow-sibling[1] 是 <block> 元素且 <p class="p1"> 值位于 <p class="p"> 元素中。 输入XML文件-: <root> <p class="p">aaaaaa</p> <block> <p>block</p> </block> <p class="p1"> bbb </p> <block> <p>block</p> </block> <p class="p1">bbb.</p> <p class="p">cccc</p> </root> 我想要下面的预期输出。 输出XML文件: <root> <p class="p">aaaaaa<block><p>block</p></block> bbb <block><p>block</p></block>bbb.</p> <p class="p">cccc</p> </root> 我们能否以另一种方式将逻辑纠正到输出上方,我在输出上方使用 XSLT: <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="p[@class='p']"> <xsl:choose> <xsl:when test="following-sibling::*[1][self::block]"> <xsl:text disable-output-escaping="yes">&lt;p&gt;</xsl:text> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <p><xsl:apply-templates select="@*|node()"/></p> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="p[@class='p1']"> <xsl:choose> <xsl:when test="following-sibling::*[1][self::p[@class='p']]"> <xsl:apply-templates/> <xsl:text disable-output-escaping="yes">&lt;/p&gt;</xsl:text> </xsl:when> <xsl:otherwise> <xsl:apply-templates/> </xsl:otherwise> </xsl:choose> </xsl:template> 以下内容似乎包装/分组了输入示例的正确节点,但我不确定它是否实现了您的要求,我还不太理解它们。 <xsl:template match="root"> <xsl:copy> <xsl:for-each-group select="*" group-starting-with="p[@class = 'p']"> <xsl:copy> <xsl:apply-templates select="node(), current-group() except ."/> </xsl:copy> </xsl:for-each-group> </xsl:copy> </xsl:template>

回答 1 投票 0

如何根据值确定节点的位置

我试图根据节点的值获取节点的位置,以便我可以获取相应的条目。 这是源 XML: ...

回答 1 投票 0

同时复制结构和子结构

我的目标是使用 XSLT 1.0 来转换 XML 文件,以便它复制特定的节点。问题是,我需要复制也需要复制的结构的子结构。 这里

回答 1 投票 0

如何使用 XSLT 删除基于值的特定 XML 元素

假设我们有要转换的 XML: 测试 / 假设我们有要转换的 XML: <?xml version="1.0" encoding="UTF-8"?> <node> <field1>test</field1> <field2>/</field2> <field3>test2</field3> <field4>/<field4> </node> 我想使用 XSLT 1.0 对其进行转换,以便复制整个结构和所有值,除了具有值“/”的元素。 到目前为止,我已经找到了这个,我认为这离我需要的并不遥远,但它还没有工作。 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:strip-space elements="*"/> <xsl:output indent="yes"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="//text()='/'" /> </xsl:transform> 所以我期望的输出是这样的: <?xml version="1.0" encoding="UTF-8"?> <node> <field1>test</field1> <field3>test2</field3> </node> 尝试此操作时,我收到未指定的错误(因为我正在使用免费的在线工具进行转换)。 //text()='/' 不是有效的位置路径。 在任何情况下,您想要删除元素,而不是文本节点 - 所以您应该使用类似的东西: <xsl:template match="*[.='/']" />

回答 1 投票 0

如何使用 XSLT 将 XML 转换为 XML

我不知道我错过了什么,但是......我有这个XML: 我不知道我错过了什么,但是......我有这个 XML: <Records xmlns=http://www.archer-tech.com/ xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=https://analysiscenter.veracode.com/schema/2.0/archerapi https://analysiscenter.veracode.com/resource/2.0/archerreport.xsd> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadas</cwe_description> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadsadasdsadaas</cwe_description> </Record> </Records> 我已经尝试使用 xslt 来做到这一点: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:output method="xml" input="xml" /> <xsl:template match="/"> <Records> <xsl:for-each select="./Record"> <Record> <xsl:copy-of select="app_name" /> <app_id><xsl:value-of select="app_id" /></app_id> <cwe_description> <xsl:if test="cwe_description"> <xsl:copy-of select="cwe_description" /> </xsl:if> </cwe_description> </Record> </xsl:for-each> </Records> </xsl:template> </xsl:stylesheet> 我期待这样的 XML: <Records> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadas</cwe_description> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description></cwe_description> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadsadasdsadaas</cwe_description> </Record> </Records> 它正在工作,但我收到了翻译后的 XML: 如何解决?有谁知道如何帮助我吗? 请尝试以下 XSLT。 它有两件事: 删除命名空间。 添加缺失的 <cwe_description/> 元素。 输入XML <?xml version="1.0"?> <Records xmlns="http://www.archer-tech.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://analysiscenter.veracode.com/schema/2.0/archerapi https://analysiscenter.veracode.com/resource/2.0/archerreport.xsd"> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadas</cwe_description> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadsadasdsadaas</cwe_description> </Record> </Records> XSLT 1.0 <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="http://www.archer-tech.com/" exclude-result-prefixes="ns1"> <xsl:output method="xml" indent="yes"/> <!-- remove all namespaces --> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="ns1:Record[not(ns1:cwe_description)]"> <Record> <app_name><xsl:value-of select="ns1:app_name" /></app_name> <app_id><xsl:value-of select="ns1:app_id" /></app_id> <cwe_description/> </Record> </xsl:template> </xsl:stylesheet> 输出XML <?xml version="1.0" encoding="utf-8"?> <Records> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadas</cwe_description> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description/> </Record> <Record> <app_name>C3L-SCHEDULER</app_name> <app_id>1484475</app_id> <cwe_description>testsdsasadsadasdsadaas</cwe_description> </Record> </Records>

回答 1 投票 0

如何在xslt-1.0中从xml变量中选择元素?

我这里有一个xslt转换,包括这个: 我这里有一个 xslt 转换,包括这个: <xsl:variable name="mydict"> <dict> <entry name="a" value="1"/> <entry name="b" value="2"/> <entry name="c" value="3"/> <entry name="d" value="4"/> </dict> </xsl:variable> 可行,我可以将其称为 $mydict,例如,用 <xsl:copy-of select="$mydict"/> 打印它。 但是,从那一刻起,如果我想实际使用它来做某事,更清楚的是,如果我想将它用作字典,事情就会变得丑陋。或者地图。或者字符串索引的字符串数组。 例如,如果我有另一个值为 3 的变量,我怎样才能得到 "c"? 我对$mydict//entry[@name="$c"]和类似的尝试都因各种症状而失败。我认为,问题可能根源在于 $mydict 就像一个字符串而不是一个节点,我可以在其中执行各种操作(最重要的是,通过 xpath 查询引用其部分)。 我这里有一个 xsltproc 命令行工具,我很乐意继续使用它,但如果没有更好的方法,可以切换到最新的 saxon。 好的,我已经找到解决方案了。 node-set 函数执行此操作,然后执行 a <xsl:copy-of select="exsl:node-set($mydict)//dict/type[@name='$idx']"/> 会做我想做的事。重要的是: node-set($mydict)可以将$mydict从xml变量转换为实际节点。作为一个节点集,它也可以有多个顶级节点。 node-set() 不是基本 xslt 的一部分,但它是一个扩展。幸运的是,xsltproc 支持此扩展,但它需要在其 <xml 命名空间标头中进行声明,大致如下: 之后,我们的 node-set() 方法为 exsl:node-set。

回答 1 投票 0

XSLT 减去金额

请帮助 xslt 1.0 TotalAmount 值应从迭代中的子金额值中减去。Total amount 中的剩余值是从子值中减去。 输入: ... 请在 xslt 1.0 中提供帮助。TotalAmount 值应从迭代中的子金额值中减去。总金额中的剩余值是从子值中减去。 输入: <header> <TotalAmount>60</TotalAmount> <List> <info> <serialNo>1</serialNo> <childAmount1>20</childAmount1> <childAmount2>10</childAmount2> </info> <info> <serialNo>2</serialNo> <childAmount1>20</childAmount1> <childAmount2>10</childAmount2> </info> <info> <serialNo>3</serialNo> <childAmount1>20</childAmount1> <childAmount2>10</childAmount2> </info> </List> </header> 输出: <header> <TotalAmount>60</TotalAmount> <List> <info> <serialNo>1</serialNo> <childAmount1>-40</childAmount1>....childAmount1-TotalAmount(20-60) <childAmount2>-30</childAmount2>....childAmount2-remainingTotalAmount(10-40) </info> <info> <serialNo>2</serialNo> <childAmount1>-10</childAmount1>...childAmount1-remainingTotalAmountfromfirstIteration(20-30) <childAmount2>0</childAmount2>...childAmount2-remainingTotalAmountfromabove(10-10) </info> <info> <serialNo>3</serialNo> <childAmount1>0</childAmount1>....(There is no TotalAmount value remaining so make it zero) <childAmount2>0</childAmount2>....(There is no TotalAmount value remaining so make it zero) </info> </List> </header> 这是一种使用起来非常不方便的格式。也许尝试这样的事情: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="header"> <xsl:copy> <xsl:copy-of select="TotalAmount"/> <List> <xsl:call-template name="process"> <xsl:with-param name="infos" select="List/info"/> </xsl:call-template> </List> </xsl:copy> </xsl:template> <xsl:template name="process"> <xsl:param name="infos"/> <xsl:param name="balance" select="TotalAmount"/> <xsl:if test="$infos"> <xsl:variable name="info" select="$infos[1]" /> <xsl:variable name="balance1" select="$balance - $info/childAmount1" /> <xsl:variable name="balance2" select="$balance1 - $info/childAmount2" /> <info> <xsl:copy-of select="$info/serialNo"/> <childAmount1> <xsl:choose> <xsl:when test="$balance1 > 0"> <xsl:value-of select="$balance1"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </childAmount1> <childAmount2> <xsl:choose> <xsl:when test="$balance2 > 0"> <xsl:value-of select="$balance2"/> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </childAmount2> </info> <xsl:call-template name="process"> <xsl:with-param name="infos" select="$infos[position() > 1]"/> <xsl:with-param name="balance" select="$balance2"/> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet> 我使用的逻辑和结果与你的略有不同,但这样对我来说更有意义。如果需要的话,进行必要的调整应该不会太困难。

回答 1 投票 0

字符串值需要双引号

xslt 1.0 中有没有办法将“/”分隔的字符串转换为逗号分隔并用双引号括起来。 输入: ...

回答 1 投票 0

XSLT 使用带有 for-each 选择的变量

我对 XML 和 XSLT 非常陌生,刚刚开始一份工作,我的一个项目需要我使用它。我正在尝试使用动态变量(稍后该变量将不会被硬编码)来获取属性...

回答 3 投票 0

将节点及其子节点移动到同一级别的另一个节点

我需要将一个节点及其子元素移动到同一级别的下一个节点。 DSPACCNAME 节点及其子元素应移至 DSPACCINFO 节点。 下面是我的输入 XML <

回答 1 投票 0

在多个子节点中过滤

是否可以同时在多个子节点中进行过滤? 根据下面的示例,我希望 xslt 检查“蓝色属性”值是否不存在。 我的 XML: <...

回答 1 投票 0

需要一个函数来使用xslt获取LV记录上的LP记录值

我需要在字段:LV_Reason 中获取 LV 记录上 RecordType: LP 的 LP_Leave_Reason 值。如果每个 Emp 有两个以上 LP 记录,则需要获取 LP 记录的第一个 LP_Leave_Reason。 对于每一个 LV 记录...

回答 1 投票 0

使用 xsl:number

考虑以下 XML 文档: ...

回答 1 投票 0

在 xslt 中添加两个模板时出现 NAN

我分别定义了两个模板。当我单独打电话给他们每个人时,我得到了正确的值。 但是当我添加它们时,该值显示为 NAN。 总毛重 : 33.00 1,261.98 NaN 可以

回答 1 投票 0

字符串 XSLT 命名空间问题

我有一个 XSLT 文件,我想在其中使用 String 名称空间中的一堆函数。即,http://exslt.org/strings,但该网站似乎不再存在。因此我的代码如下

回答 1 投票 0

<xsl:copy-of select="..."/> 怪异(或者如何在 XPath 1.0 中将属性转换为字符串)

ok,想象一个场景,您想要创建一个元素 Foo,有时包含文本,有时包含元素,例如 所以有时输出需要看起来像这样(我嵌入了一个

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.