xslt-2.0 相关问题

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

使用 SaxonEE 9.9.1 和 XSLT2.0 出现错误 对 Java 方法的自反调用需要 Saxon-PE 或 Saxon-EE 许可证,但没有找到

我正在使用 SAXONEE 和 XSLT 2.0。为了解决这个问题ExtensionFunction是怎么样的? 下面是我正在使用的导入 JAVA 类的代码: xmlns:myclass="java:com.output.extensionFile" ...

回答 1 投票 0

嵌入 CDATA 中的 xslt 样式表的身份转换

输入数据 输入数据 <?xml version="1.0" encoding="UTF-8"?> <root> <PETS> <cats_stylesheet><![CDATA[<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <Cats> <name> <xsl:value-of select="'Felix'"/> </name> <breed> <xsl:value-of select="cat/breed" </breed> <age> <xsl:value-of select="cat/age" </age> </Cats> </xsl:template> </xsl:stylesheet> ]]></cats_stylesheet> <dogs_stylesheet><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <Dogs> <name> <xsl:value-of select="'Rover'"/> </name> <breed> <xsl:value-of select="dog/breed"/> </breed> <age> <xsl:value-of select="dog/age"/> </age> </Dogs> </xsl:template> </xsl:stylesheet> ]]></dogs_stylesheet> </PETS> </root> 所需输出 这应该只是原件的副本,但只更改了狗的名字。 <?xml version="1.0" encoding="UTF-8"?> <root> <PETS> <cats_stylesheet><![CDATA[<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <Cats> <name> <xsl:value-of select="'Felix'"/> </name> <breed> <xsl:value-of select="cat/breed" </breed> <age> <xsl:value-of select="cat/age" </age> </Cats> </xsl:template> </xsl:stylesheet> ]]></cats_stylesheet> <dogs_stylesheet><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <Dogs> <name> <xsl:value-of select="'Cerberus'"/> </name> <breed> <xsl:value-of select="dog/breed"/> </breed> <age> <xsl:value-of select="dog/age"/> </age> </Dogs> </xsl:template> </xsl:stylesheet> ]]></dogs_stylesheet> </PETS> </root> 我尝试过的 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias" version="3.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes" cdata-section-elements="cats_stylesheet dogs_stylesheet" exclude-result-prefixes="xsl"/> <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="dogs_stylesheet"> <xsl:variable name="contents_of_cdata"> <xsl:value-of disable-output-escaping="true" select="text()"/> </xsl:variable> <dogs_stylesheet> <Dogs> <name> <xsl:value-of select="'Cerberus'"/> </name> <xsl:copy-of select="$contents_of_cdata/xsl:stylesheet/xsl:template/Dogs/node()[not(self::Dogs/name)]"/> </Dogs> </dogs_stylesheet> </xsl:template> </xsl:stylesheet> 我尝试将 CDATA 文本转换为“节点集”(使用旧的 xsltl 1.0 术语),但这不起作用。 它没有将 dogs_stylesheet 放入 CDATA 标记中 它正在插入名称空间 dogs_stylesheet CDATA 文本未转换为“节点集” 如何才能达到想要的输出?

回答 0 投票 0

如何根据“@rid”值设置正确的属性“@id”值

我试图根据@rid 属性值在属性@id 中输入正确的值。 逻辑:如果“au”元素中元素 a 大于 1 并且元素 cu 等于 1,则如何在之后添加位置...

回答 1 投票 0

在 XSL 中使用 XSL 结果文档标记将 XML 转换为 HTML 未给出所需的结果

我们用结果文档(XSLT-2.0 Saxon 处理器)替换了重定向:写入。 之前使用重定向:写入用于获取 3 个输出 HTML,从一个 HTML 我们可以通过单击导航到另一个 HTML...

回答 1 投票 0

我的 XSLT 2.0 count() 函数未返回预期结果

我有一个 XML 块,如下所示: ...

回答 0 投票 0

使用 XSL-FO 替换文本

我最近问了一个类似的问题Convert text string to xml tagging using xsl pt.2并收到了解决方案,它帮助我整理了一些XSL-FO代码。 现在,我正在尝试转换的 XML...

回答 1 投票 0

使用XSL将普通过滤语句转换为混合过滤语句

检查input(property/token(filter1/filter)/value)中的正常过滤语句以逻辑表达式开头, 第一步是检查表达式验证器,如果产品包含任何位置 (TO...

回答 0 投票 0

如何忽略oracle xmltable中没有属性的祖先

在Oracle 19c xmltable中如何忽略没有属性的祖先元素 例如: 滑稽...

回答 0 投票 0

xsl:如何拆分字符串?

我想将分号 (;) 上的地址拆分为由 分隔的行: 例如如果 address=123 Elm Street,我想输出 123 Elm Street, 但是如果地址=123 Elm Street;PO Box 222,我想要...

回答 3 投票 0

解析 xsl 错误 - javax.xml.transform.TransformerException: use-character-maps attribute is not allowed on the xsl:output element

在 Java 中使用 XML 序列化器解析其中一个 XML 文件时,HTML 实体被转换为相应的十六进制代码值(例如 mdash 输出为“十六进制值-#x2014;”)...

回答 0 投票 0

如何根据 xml 值在表(表是动态的)内设置不同的 fo:block(<fo:table-cell> 内)属性(例如:font-weight="bold")

下面是我的示例xml; .. 的数量将固定为 (4);和..内容也将相同;只有.. 下面是我的示例 xml; <Item>..</Item>的数量将固定为(4);和<ItemName>..</ItemName>内容也将相同;只有<ItemValue> ..</ItemValue>,会改变。 以下是示例 xml: <Header> <Item> <ItemName><![CDATA[ItemName1]]></ItemName> <ItemValue><![CDATA[ItemValue1]]></ItemValue> </Item> <Item> <ItemName><![CDATA[ItemName2]]></ItemName> <ItemValue><![ItemValue2]]></ItemValue> </Item> <Item> <ItemName><![CDATA[ItemName3]]></ItemName> <ItemValue><![CDATA[ItemValue3]]></ItemValue> </Item> <Item> <ItemName><![CDATA[ItemName4]]></ItemName> <ItemValue><![CDATA[ItemValue4]]></ItemValue> </Item> </Header> 现在我想在这里表示 ItemName(s) 和 ItemValue(s),前提是最后两组是 (ItemName3,ItemValue3) 和 (ItemName4,ItemValue4),我想以粗体显示;显然,我们可以通过根据需要设置 fo:block font-weight="bold" 来逐一遍历。 但是在这里我想在循环中使用它; 试过如下示例代码: <fo:table table-layout="fixed" width="100%"> <fo:table-column column-width="30mm"/> <fo:table-column column-width="35mm"/> <fo:table-body> <xsl:for-each select="Header/Item"> <fo:table-row> <fo:table-cell> <xsl:choose> <xsl:when test="ItemName != 'ItemName3' or ItemName != 'ItemName4'"> <fo:block> <xsl:value-of select="ItemName"/> </fo:block> </xsl:when> <xsl:otherwise> <fo:block font-weight="bold"> <xsl:value-of select="ItemName"/> </fo:block> </xsl:otherwise> </xsl:choose> </fo:table-cell> <fo:table-cell> <xsl:choose> <xsl:when test="ItemName != 'ItemName3' or ItemName != 'ItemName4'"> <fo:block> <xsl:value-of select="ItemValue"/> </fo:block> </xsl:when> <xsl:otherwise> <fo:block font-weight="bold"> <xsl:value-of select="ItemValue"/> </fo:block> </xsl:otherwise> </xsl:choose> </fo:table-cell> </fo:table-row> </xsl:for-each> </fo:table-body> 但是 fop 抱怨 fo:table-cell 缺少子元素;那么可能的解决方案是什么? 更新 在上面的代码中添加了 xsl:choose 现在它没有抱怨但也没有得到预期的结果。相反,所有文本仅以正常字体粗细打印。 按照建议也尝试过代码片段(仅发布粗体逻辑) <xsl:if test="ItemName != 'ItemName3' or ItemName != 'ItemName4'"> <xsl:attribute name="font-weight" select="'bold'"/> </xsl:if> 虽然没有错误,但也没有得到任何预期的结果。 试试这个: <xsl:for-each select="Header/Item"> <fo:table-row> <fo:table-cell> <fo:block> <xsl:if test="not(ItemName=('ItemName3','ItemName4'))"> <xsl:attribute name="font-weight" select="'bold'"/> </xsl:if> <xsl:value-of select="ItemName"/> </fo:block> </fo:table-cell> </fo:table-row> </xsl:for-each>

回答 1 投票 0

position() 函数不起作用 XSLT2.0 FOP2.8

我正在尝试根据下面的位置从 xml 中获取数据是示例 xml &...

回答 2 投票 0

无法在 xsl:for-each 中按顺序增加我的计数器

目的是获取所有兄弟姐妹的数量,然后在循环内通过引用他们的索引打印所有兄弟姐妹的内容;下面是代码部分 目的是获取所有兄弟姐妹的个数,然后在循环内通过索引打印所有兄弟姐妹的内容;下面是代码部分 <fo:flow flow-name="xsl-region-body"> <xsl:variable name="headerCount"> <xsl:value-of select="count(xPath/To/My/Item)"/> </xsl:variable> <xsl:variable name="count" as="xs:integer" select="1"/> <fo:block> <xsl:value-of select="xPath/To/My/Item[$count]/ItemVal"/> <xsl:variable name="count" select="$count+number(1)"/> <xsl:value-of select="xPath/To/My/Item[$count]/ItemVal"/> </fo:block> </fo:flow> 此代码部分工作正常,并根据 <Item><ItemVal>Content</ItemVal></Item>.....<Item>...</Item> 的索引 [1] 和 [2] 相应地呈现内容 注意: 索引而不是兄弟姐妹的数量可以超过 2 但是当我尝试在 xsl:for-each 和 xsl:if 测试中运行它时,它不起作用下面是代码片段: <fo:flow flow-name="xsl-region-body"> <xsl:variable name="headerCount"> <xsl:value-of select="count(xPath/To/My/Item)"/> </xsl:variable> <xsl:variable name="count" as="xs:integer" select="1"/> <fo:block> <xsl:for-each select="xPath/To/My/Item"> <xsl:if test="$count &lt;= number($headerItemCount)"> <xsl:value-of select="xPath/To/My/Item[$count]/ItemVal"/> <xsl:variable name="count" select="$count+number(1)"/> </xsl:if> </xsl:for-each> </fo:block> </fo:flow> 哪里出了问题任何建议都会有帮助 <fo:flow flow-name="xsl-region-body"> <xsl:variable name="headerCount"> <xsl:value-of select="count(xPath/To/My/Item)"/> </xsl:variable> <xsl:variable name="count" as="xs:integer" select="1"/> <fo:block> <xsl:for-each select="xPath/To/My/Item"> <xsl:if test="position() &lt;= $headerCount"> <xsl:value-of select="ItemVal"/> </xsl:if> </xsl:for-each> </fo:block> </fo:flow> 想要有一个循环计数器似乎是相当程序化的想法;没有必要,您可以处理您选择的序列(XSLT 2/3)或节点集(XSLT 1),只需一个 for-each 或 apply-templates 例如<xsl:for-each select="xPath/To/My/Item[position() &lt;= count(xPath/To/My/HeaderItem)]">. 如果您想将序列或节点集的计数存储在变量中,那当然是可能的,但请注意,使用<xsl:variable name="headerCount" select="count(xPath/To/My/Item)"/>比嵌套xsl:variable/xsl:value-of更自然和高效。

回答 2 投票 0

在同一个地方复制所有重复的标签

我正在使用 xslt 1.0,我有以下输入 xml: 1 不重复 <

回答 0 投票 0

如何在XSLT2.0中使用.svg?

我看到类似于 .ttf 文件;还有扩展名为 .svg 的文件 我们可以像使用 .ttf 文件一样使用这些 .svg 文件吗?或者我们可以使用这些 .svg 的任何其他用例...

回答 1 投票 0

XML 平面编号索引到真实树结构 - XSLT

XML 平面编号索引到真实树结构 - XSLT 我正在尝试制作一个索引树,其中编号部分在逻辑上彼此嵌套。我正在使用 XSLT 2.0 并一直在尝试用于...

回答 1 投票 0

当搜索值在字符串中出现两次时,使用 Substring-Before 和 Substring-After 的 XSLT 格式不正确

我的 xml 中有以下地址,需要在输出文本文件中格式化为地址、城市、州/zip: 我正在使用 XSLT 2.0 这是我正在使用的 xslt 转换 我的 xml 中有以下地址,需要在输出文本文件中格式化为地址、城市、州/zip: 我正在使用 XSLT 2.0 这是我正在使用的 xslt 转换 <xsl:variable name="LF" select="'&#xa;'"/> <xsl:function name="placer:GetStreetAddress"> <xsl:param name="addressString" as="xs:string"/> <xsl:value-of select="substring($addressString, 1, string-length(substring- before($addressString,$LF)))"/> </xsl:function> <xsl:function name="placer:GetCityStateZip"> <xsl:param name="addressString" as="xs:string"/> <xsl:value-of select="substring($addressString, (string-length(substring-before($addressString,$LF))) + 5 + 1 )"/> </xsl:function> <xsl:function name="placer:GetCity"> <xsl:param name="addressString" as="xs:string"/> <xsl:value-of select="substring-before(placer:GetCityStateZip($addressString),',')"/> </xsl:function> <xsl:function name="placer:GetStateZip"> <xsl:param name="addressString" as="xs:string"/> <xsl:value-of select="substring(translate(substring-after($addressString,', '), ' ', ''), 1,7)"/> </xsl:function> <xsl:function name="placer:PadRight"> <xsl:param name="length" as="xs:integer"/> <xsl:param name="padChar" as="xs:string"/> <xsl:param name="stringToPad"/> <xsl:value-of select="upper-case(substring(string-join(($stringToPad, for $i in (1 to $length) return $padChar),''),1,$length))"/> </xsl:function> 文件地址显示为: 在向子字符串提供硬编码值时验证文件格式是否正确

回答 0 投票 0

跟踪样式是什么意思?我们如何使用 xsl 实现 Tracking w.r.t 样式?

在一些竞争性的 xslt 技术会议中,我看到他们使用样式表来提及他们在编写 xslt 时提到的样式表,确保我们使用的规范如下 追踪:-3 K...

回答 0 投票 0

需要将 xhtml 表转换为具有行跨度的 dita 特定表

需要将 xhtml 表转换为具有行跨度的 dita 特定表 基本上,如果 rowspan 属性有多个 td 元素,它应该转移到下一列。 当前情况...

回答 1 投票 0

如何删除 fo:block 内的自动空间

我正在写一个带有标题和 fo:leader 的简单块,下面是示例代码: 方法 我正在写一个带有标题和 fo:leader 的简单块,下面是示例代码: <fo:block font-weight="bold" font-size="4.3mm"> Methods <fo:leader leader-pattern="rule" rule-thickness=".5mm" leader-length="267mm" color="cmyk(0,0,0,1)"/> </fo:block> 所以我的期望是文本将作为标题和规则出现在标题下方,但我看到“方法”和规则之间有明显的空间 附上样品;我在屏幕截图中用向下箭头突出显示了空间: 我可以用fo:block或fo:leader中的什么规格来删除那个空间? fo:leader 是一个内联 FO。一个较短的领导者通常会紧跟其前面的文本;类似于:“方法_____”。因为你的 leader-length 被固定到,大概是身体区域的宽度,领导者被迫到下一行。 你看到的空间是因为领导者在下一行的字母基线上,就像它与文本在同一行时一样。 @MartinHonnen 的解决方案将规则移动到其行空间的顶部,但在移动的领导者下方仍有空白行的空间。在 fo:block 之后的 fo:block 和领导者看起来像它前面有一个空行(这可能是你想要的)。 其他可能的解决方案包括: 在border-bottom上设置fo:block而不是使用fo:leader 在line-height上设置font-size和/或fo:leader,这样占用的空间更少 使用带边框的空fo:block代替fo:leader并设置line-height、font-size、space-before和/或space-after以获得您想要的效果。

回答 1 投票 0

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