xslt 相关问题

XSLT是XML的一种转换语言,旨在将结构化文档转换为其他格式(如XML,HTML和纯文本,或者在XSLT 3,JSON中)。问题应该根据需要使用xslt-1.0,xslt-2.0或xslt-3.0标记之一。

Fo 内联换行不会删除将 XML 格式化为 XLS(excel)文件的 XSL 中的文本

使用 Xsl 样式表,我将输出 XML 文件(从我的工具获得)格式化为 Excel(xls 文件)。在此,我只想删除一段文字。我正在使用 fo:inline ,如下所示: &...

回答 1 投票 0

将 xml 转换保存在新的 xml 文件中

嘿嘿! 我有一个 xslt 文件来转换我的 xml,它运行得很好:) 但我只在氧气终端中得到结果,而不是在单独的文件中。 我试过: 嘿! 我有一个 xslt 文件来转换我的 xml,它运行得很好:) 但我只能在氧气终端中获得结果,而不是在单独的文件中。 我尝试过: <xsl:stylesheet xmlns="http://www.tei-c.org/ns/1.0" xmlns:telota="http://www.telota.de" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xpath-default-namespace="http://www.tei-c.org/ns/1.0" exclude-result-prefixes="xs" version="2.0"> <xsl:result-document href="new_badius.xml"/> 这给了我错误:“元素 xsl:result-document 不得直接出现在 xsl:stylesheet 中” 尝试了一些层次结构的变化: <xsl:template match="node()|@*"> <xsl:copy> <xsl:result-document href="new_file.xml"/> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> 或 <xsl:template match="node()|@*"> <xsl:result-document href="new_file.xml"/> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> 这给了我错误只能创建一个 new_file.xml (它是空的) 我应该把<xsl:result-document href="new_file.xml"/>放在哪里,或者有更好的方法将我的结果保存为.xml吗? xsl:result-document属于模板,哪个模板显然取决于您的XML输入结构、样式表结构以及结果文档的数量和想要的内容。 另请注意,oXygen 允许您配置一个转换场景,您可以在其中定义将主要结果写入到您可以定义名称的文件中,请参阅 https://www.oxygenxml.com/doc/versions/26.1/ ug-editor/topics/the-output-tab.html.

回答 1 投票 0

抑制 Saxon 中的函数查找消息

我在 Java Swing 应用程序中使用 Saxon 12.4 EE,想知道是否可以禁止显示有关查找函数定义的消息: 这正在创建一个大

回答 1 投票 0

使用 AntennaHouse Formatter v73 将 DITA-OT PDF2 插件输出转换为灰度

我目前正在使用 DITA-OT 4.1.1 和 AntennaHouse Formatter v73 进行 PDF 生成的样式表开发:到目前为止,我只处理过彩色输出 PDF,但将来我会...

回答 1 投票 0

如何将 XML 样式更改为 HTML 标签

我有一个 XML 文件,我正在使用 XSLT 版本 1.0 样式表将其转换为 HTML。 XML 有一个文本元素 ExampleText/AStr,其中包含 Run 元素,其中一些元素具有名为 name 的属性...

回答 1 投票 0

使用 XSL FO 格式化文本节点内的节点

我正在尝试打印包含文本和其他节点的节点,但无法将格式应用于子节点。 我有以下 xml: Lorem Ipsum 只是虚拟的

回答 1 投票 0

XSLT 基于多个元素/值删除重复节点

我有以下输入 XML 片段 ABC XYZ LOC_1 ...

回答 1 投票 0

如何按照计划代码的顺序获取每个元素值

我需要表行应按照代码值的顺序获取 输入 xml 我有: 20000 我需要表行应按照代码值的顺序获取 输入我有的xml: <Group> <Maps> <Map> <Code>20000</Code> </Map> <Map> <Code>30000</Code> </Map> </Maps> <Details> <Detail> <Code>30000</Code> <Description>Benefit</Description> </Detail> <Detail> <Code>20000</Code> <Description>Non-Benefit</Description> </Detail> </Details> </Group> XSL 我已经使用变量尝试了以下操作: <xsl:template match="Group"> <xsl:variable name="MapCode" select="Maps/Map/Code"/> <row> <entry>Code</entry> <xsl:for-each select="Maps/Map"> <entry> <p> <xsl:value-of select="Code"/> </p> </entry> </xsl:for-each> </row> <row> <entry>Level</entry> <xsl:for-each select="Details/Detail[Code=$MapCode]"> <entry> <p> <xsl:value-of select="Description"/> </p> </entry> </xsl:for-each> </row> </xsl:template> 我得到的实际输出: <row> <entry>Code</entry> <entry> <p>20000</p> </entry> <entry> <p>30000</p> </entry> </row> <row> <entry>Level</entry> <entry> <p>Benefit</p> </entry> <entry> <p>Non-Benefit</p> </entry> </row> 预期输出应该是: <row> <entry>Code</entry> <entry> <p>20000</p> </entry> <entry> <p>30000</p> </entry> </row> <row> <entry>Level</entry> <entry> <p>Non-Benefit</p> </entry> <entry> <p>Benefit</p> </entry> </row> 根据 Code 订单匹配,应选择 Description 值。我将变量用于 Code 匹配。但它仍然错误地选择了 Description 值。所以描述应该按照代码顺序选择。 我猜你想做类似的事情: XSLT 2.0 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="detail-by-code" match="Detail" use="Code" /> <xsl:template match="/Group"> <xsl:variable name="headings" select="Maps/Map" /> <table> <!-- header --> <row> <xsl:for-each select="$headings"> <entry> <p> <xsl:value-of select="Code"/> </p> </entry> </xsl:for-each> </row> <!-- data --> <xsl:for-each select="Details"> <xsl:variable name="current-row" select="." /> <row> <xsl:for-each select="$headings"> <entry> <p> <xsl:value-of select="key('detail-by-code', Code, $current-row)"/> </p> </entry> </xsl:for-each> </row> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

XML 节点值的 OR 条件

我需要检查XML节点的值。 但为什么这不起作用呢? 我需要检查XML节点的值。 但为什么这不起作用? <xsl:if test="(applicationData/remittingAccount/paymentMethodCode != 'ABC' or applicationData/remittingAccount/paymentMethodCode != 'XYZ')"> 我也尝试过这个 <xsl:if test="(applicationData/remittingAccount/paymentMethodCode != 'ABC') or (applicationData/remittingAccount/paymentMethodCode != 'XYZ')"> 还有这个 <xsl:if test="applicationData/remittingAccount/paymentMethodCode != 'ABC' or applicationData/remittingAccount/paymentMethodCode != 'XYZ'"> 请帮忙! 您还没有解释您想要检查的内容,但是那些在 XPath 通用比较运算符的语义上苦苦挣扎的人可能想要检查,例如not(applicationData/remittingAccount/paymentMethodCode = ('ABC', 'XYZ')) 而不是你的尝试。仅当 applicationData/remittingAccount/paymentMethodCode 都不等于 ABC 或 XYZ 时,该检查才为真。 测试: test="node != 'ABC' or node != 'XYZ'" 当节点不存在时,将返回 false only。 在所有其他情况下,即使只有一个节点,测试也始终为 true - 因为节点的字符串值不能同时为“ABC”和“XYZ”,因此至少其中一个语句将说实话。 您可能正在寻找 test="not(node = 'ABC' or node = 'XYZ')" 如果没有节点具有这些字符串值,则为真。

回答 2 投票 0

具有多个 LineItems 的 Xml 到 Json

我正在尝试将 xml 转换为 json,但在 xml 到 json 转换期间未形成多个行项目。我们总是在 xml 消息中包含单个或多个 Lineitem,其名称与“vpoItemLi...

回答 1 投票 0

如何通过编辑XSL样式检查单词参考书目参考条目,如果未填写则显示错误

参考以下MS提供的指南: MS 参考书目样式编辑指南 以及 IEEE 参考样式 IEEE xsl 样式文件。 我正在定制 IEEE 参考书目

回答 1 投票 0

XSL根据条件选择正确的子字符串

我正在从一个带有 ' ' 分隔符的简单 2 子字符串过渡,该分隔符当前使用前子字符串和后子字符串,但现在我需要修改它以容纳多个子字符串...

回答 1 投票 0

IE11 XSLT 将 <param> 节点转换为自闭标签而不关闭

这个问题与此非常相关 输出到 DOM 时,XSLT 将 节点转换为 标签 考虑这段代码: <question vote="0"> <p>这个问题与此非常相关 <a href="https://stackoverflow.com/questions/78266294/xslt-converts-image-node-to-img-tag-when-outputiing-to-dom">XSLT 在输出到 DOM 时将 <image> 节点转换为 <img> 标签</a></p> <p>考虑这段代码:</p> <pre><code>&lt;script type=&#34;application/xml&#34; id=&#34;data&#34;&gt; &lt;xsl:copy-of select=&#34;/*&#34; /&gt; &lt;/script&gt; </code></pre> <p>这会将 XML 文档的内容输出到 html 页面中。 然后,可以很容易地通过 javascript 的 DOMParser() 对象解析 XML 中的数据,从而可以在网页上轻松访问这些数据,而无需使用 XSLT 生成网页。</p> <p>需要在脚本标签之间移动 <xsl:copy-of select"/*" />,以防止 XSLT 转换器将 XML 文件中的节点转换为 HTML 中的标签。</p> <p>这工作得很好,直到我发现节点也发生了同样的情况。简单地说:如果 XML 有节点,输出将被破坏且无法解析,如下所示:</p> <p><a href="https://i.stack.imgur.com/Ns44i.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL05zNDRpLnBuZw==" alt=""/></a></p> <p>如何防止这种行为?如何阻止浏览器引擎使标签成为自关闭标签?</p> <pre><code>new DOMParser().parseFromString() </code></pre> <p>/\ 不适用于自关闭节点。 (<strong>澄清</strong>:显然 DOMParser 将与自关闭节点一起工作,只是在这种情况下它不是自关闭的,即 - 没有正斜杠)</p> <hr/> <p>好的,这里是重现此内容所需的文件:</p> <p>测试.xslt</p> <pre><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt; &lt;xsl:stylesheet xmlns:xsl=&#34;http://www.w3.org/1999/XSL/Transform&#34; version=&#34;1.0&#34;&gt; &lt;xsl:output method=&#34;html&#34; indent=&#34;no&#34; version=&#34;5.0&#34; /&gt; &lt;xsl:template match=&#34;/&#34;&gt; &lt;xsl:text disable-output-escaping=&#39;yes&#39;&gt;&amp;lt;!DOCTYPE html&gt;&lt;/xsl:text&gt; &lt;xsl:apply-templates select=&#34;root&#34; /&gt; &lt;/xsl:template&gt; &lt;xsl:template match=&#34;root&#34;&gt; &lt;html&gt; &lt;head&gt; &lt;script type=&#39;application/xml&#39;&gt; &lt;xsl:copy-of select=&#34;/*&#34; /&gt; &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;qwe&lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>测试.xml</p> <pre><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt; &lt;?xml-stylesheet type=&#34;text/xsl&#34; href=&#34;test.xslt&#34;?&gt; &lt;root&gt; &lt;object&gt; &lt;text&gt;text&lt;/text&gt; &lt;param name=&#34;name&#34;&gt;&lt;/param&gt; &lt;/object&gt; &lt;/root&gt; </code></pre> <p>在 Internet Explorer 11 兼容模式下使用 Edge 打开 test.xml。 “head”应该包含一个带有扭曲 xml 的脚本。</p> <p><a href="https://i.stack.imgur.com/N6RRV.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL042UlJWLnBuZw==" alt=""/></a></p> <p>在 Windows 10 上,打开 xml 文件后,您可以通过执行“运行 (Win+R)”->“%systemroot%\system32 12\IEChooser.exe”来打开开发人员工具</p> </question> <answer tick="true" vote="1"> <p>至于我的建议,要使用该库进行序列化,其外观如下(在实际使用中,不要通过 HTTP(S) 导入,请使用本地副本 <pre><code>xsl:import</code></pre>):</p> <pre><code>&lt;xsl:stylesheet xmlns:xsl=&#34;http://www.w3.org/1999/XSL/Transform&#34; version=&#34;1.0&#34;&gt; &lt;xsl:import href=&#34;https://lenzconsulting.com/xml-to-string/xml-to-string.xsl&#34;/&gt; &lt;xsl:output method=&#34;html&#34; indent=&#34;no&#34; version=&#34;5.0&#34; doctype-system=&#34;about:legacy-doctype&#34; /&gt; &lt;xsl:template match=&#34;/&#34;&gt; &lt;xsl:apply-templates/&gt; &lt;/xsl:template&gt; &lt;xsl:template match=&#34;root&#34;&gt; &lt;html&gt; &lt;head&gt; &lt;script type=&#39;application/xml&#39;&gt; &lt;xsl:apply-templates select=&#34;.&#34; mode=&#34;xml-to-string&#34;/&gt; &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;qwe&lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>这应该给你一个 <pre><code>script</code></pre> 元素,它的文本/CDATA 内容具有输入文档的 <pre><code>root</code></pre> 元素的序列化。</p> <p>至于序列化空元素的方式,在 XML 中应该不重要,但库允许您设置 <pre><code>&lt;xsl:param name=&#34;use-empty-syntax&#34; select=&#34;false()&#34;/&gt;</code></pre> 来获取例如<pre><code>&lt;param name=&#34;name&#34;&gt;&lt;/param&gt;</code></pre>。</p> </answer> </body></html>

回答 0 投票 0

XSLT 1.0 追踪 XML 对象的继承树

我正在编写一个 XSLT 以将 XML 模式转换为 Python 类。该模式具有深入七到八个类的深层继承树,我需要从...开始编写输出

回答 1 投票 0

IE11 XSLT 将 <param> 节点转换为自闭合标签

这个问题与此非常相关 输出到 DOM 时,XSLT 将 节点转换为 标签 考虑这段代码: <question vote="0"> <p>这个问题与此非常相关 <a href="https://stackoverflow.com/questions/78266294/xslt-converts-image-node-to-img-tag-when-outputiing-to-dom">XSLT 在输出到 DOM 时将 <image> 节点转换为 <img> 标签</a></p> <p>考虑这段代码:</p> <pre><code>&lt;script type=&#34;application/xml&#34; id=&#34;data&#34;&gt; &lt;xsl:copy-of select=&#34;/*&#34; /&gt; &lt;/script&gt; </code></pre> <p>这会将 XML 文档的内容输出到 html 页面中。 然后,可以很容易地通过 javascript 的 DOMParser() 对象解析 XML 中的数据,从而可以在网页上轻松访问这些数据,而无需使用 XSLT 生成网页。</p> <p>需要在脚本标签之间移动 <xsl:copy-of select"/*" />,以防止 XSLT 转换器将 XML 文件中的节点转换为 HTML 中的标签。</p> <p>这工作得很好,直到我发现节点也发生了同样的情况。简单地说:如果 XML 有节点,输出将被破坏且无法解析,如下所示:</p> <p><a href="https://i.stack.imgur.com/Ns44i.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL05zNDRpLnBuZw==" alt=""/></a></p> <p>如何防止这种行为?如何阻止浏览器引擎使标签成为自关闭标签?</p> <pre><code>new DOMParser().parseFromString() </code></pre> <p>/\ 不适用于自关闭节点。</p> <hr/> <p>好的,这里是重现此内容所需的文件:</p> <p>测试.xslt</p> <pre><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt; &lt;xsl:stylesheet xmlns:xsl=&#34;http://www.w3.org/1999/XSL/Transform&#34; version=&#34;1.0&#34;&gt; &lt;xsl:output method=&#34;html&#34; indent=&#34;no&#34; version=&#34;5.0&#34; /&gt; &lt;xsl:template match=&#34;/&#34;&gt; &lt;xsl:text disable-output-escaping=&#39;yes&#39;&gt;&amp;lt;!DOCTYPE html&gt;&lt;/xsl:text&gt; &lt;xsl:apply-templates select=&#34;root&#34; /&gt; &lt;/xsl:template&gt; &lt;xsl:template match=&#34;root&#34;&gt; &lt;html&gt; &lt;head&gt; &lt;script type=&#39;application/xml&#39;&gt; &lt;xsl:copy-of select=&#34;/*&#34; /&gt; &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;qwe&lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>测试.xml</p> <pre><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt; &lt;?xml-stylesheet type=&#34;text/xsl&#34; href=&#34;test.xslt&#34;?&gt; &lt;root&gt; &lt;object&gt; &lt;text&gt;text&lt;/text&gt; &lt;param name=&#34;name&#34;&gt;&lt;/param&gt; &lt;/object&gt; &lt;/root&gt; </code></pre> <p>在 Internet Explorer 11 兼容模式下使用 Edge 打开 test.xml。 “head”应该包含一个带有扭曲 xml 的脚本。</p> <p><a href="https://i.stack.imgur.com/N6RRV.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL042UlJWLnBuZw==" alt=""/></a></p> <p>在 Windows 10 上,打开 xml 文件后,您可以通过执行“运行 (Win+R)”->“%systemroot%\system32 12\IEChooser.exe”来打开开发人员工具</p> </question> <answer tick="false" vote="0"> <p>至于我的建议,要使用该库进行序列化,其外观如下(在实际使用中,不要通过 HTTP(S) 导入,请使用本地副本 <pre><code>xsl:import</code></pre>):</p> <pre><code>&lt;xsl:stylesheet xmlns:xsl=&#34;http://www.w3.org/1999/XSL/Transform&#34; version=&#34;1.0&#34;&gt; &lt;xsl:import href=&#34;https://lenzconsulting.com/xml-to-string/xml-to-string.xsl&#34;/&gt; &lt;xsl:output method=&#34;html&#34; indent=&#34;no&#34; version=&#34;5.0&#34; doctype-system=&#34;about:legacy-doctype&#34; /&gt; &lt;xsl:template match=&#34;/&#34;&gt; &lt;xsl:apply-templates/&gt; &lt;/xsl:template&gt; &lt;xsl:template match=&#34;root&#34;&gt; &lt;html&gt; &lt;head&gt; &lt;script type=&#39;application/xml&#39;&gt; &lt;xsl:apply-templates select=&#34;.&#34; mode=&#34;xml-to-string&#34;/&gt; &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;qwe&lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>这应该为您提供一个 <pre><code>script</code></pre> 元素,其文本/CDATA 内容具有输入文档的 <pre><code>root</code></pre> 元素的序列化。</p> </answer> </body></html>

回答 0 投票 0

使用带有额外命名空间的 XSLT 有条件地复制 XML 元素?

我有一个以这些行开头的 XML 我有一个以这些行开头的 XML <?xml version="1.0" encoding="utf-8"?> <TRANSFER xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.interlis.ch/INTERLIS2.3" xmlns="http://www.interlis.ch/INTERLIS2.3"> <HEADERSECTION VERSION="2.3" SENDER="ACME"> <MODELS> <MODEL NAME="DSS_2015_LV95" VERSION="13.11.2018" URI="http://www.vsa.ch/models" /> </MODELS> </HEADERSECTION> <DATASECTION> <DSS_2015_LV95.Siedlungsentwaesserung BID="999"> <DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123> <TextPos> <COORD> ..... <DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123> <TextPos> <COORD> ..... <DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_456> <Value> <Price> ..... <DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_789> <Text> <Cost> ..... 我找到了很多示例(还有一个帮助我使用特殊命名空间的示例..)“复制除 ....123 之外的所有内容”: 制作一个复制所有内容的模板 添加第二个模板,忽略“...123” 但现在我有相反的任务“仅复制...123”,包括。标头并考虑名称空间。上面描述的方式 - “复制除 456 和 789 之外的所有内容” - 不能使用,因为我不知道要忽略什么。 我没有显示我尝试过的代码(基于 xsl:copy ..),因为它是一个令人困惑的垃圾集合,但我搞乱了匹配和选择.. 我希望我的描述是可以理解的 - 对于我的不专业知识感到抱歉,并提前非常感谢。 根据您最新的评论,您可能想要类似的东西 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:il="http://www.interlis.ch/INTERLIS2.3"> <xsl:template match="il:DATASECTION//node()[not(descendant-or-self::il:DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123|ancestor::il:DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123)]"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 未指定的是,如果根本没有 DATASECTION,是否要将空 DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123 复制到输出,或者在这种情况下 DATASECTION 元素是否不应出现在输出中。如果没有 DATASECTION 子代或后代,发布的代码将创建一个空的 DSS_2015_LV95.Siedlungsentwaesserung.Abwasserbauwerk_Text_123。

回答 1 投票 0

从不同的子节点 XSLT 填充递归元素

我正在尝试向下查看 XML 文档中的某个级别,选择不同的值并为每个不同的值填充新元素。例如。获取输入 xml <

回答 1 投票 0

在 XSLT 模板中,如果名称以元音开头,我需要在名称前添加“'l”前缀

在 XSLT 模板中,我将像这样扩展输入变量: 但如果 $ClubName 以元音开头,我需要加上 l' 前缀 我想那里...

回答 1 投票 0

XSLT 1.0 复制并删除节点

我必须复制一个节点(Set_Item/ForwarderReferenceNumber)以防倍增,然后删除我们从中获取值的节点“Set_Item”。 找到相同的 Set_Item(但不同...

回答 1 投票 0

org.apache.fop.fo.extensions.svg.SVGElement.getDimension 无法设置 svg 的基本 URL

我正在尝试在 instream-foreign-object 中实现 SVG,下面是代码片段;这是 XSLT (1.0) 的代码部分; 我正在尝试在 instream-foreign-object 内实现 SVG,下面是代码片段;这是 XSLT (1.0) 的代码部分; <xsl:template name="Draft"> <fo:block-container> <fo:block> <fo:instream-foreign-object> <svg:svg xmlns:svg="http://www.w3.org/2000/svg" xml:base="http://example.org/today/" > <svg:defs> <svg:font-face font-family="sample"> <svg:font-face-src> <svg:font-face-uri href="sample.ttf"/> </svg:font-face-src> </svg:font-face> </svg:defs> <svg:text> DRAFT </svg:text> </svg:svg> </fo:instream-foreign-object> </fo:block> </fo:block-container> </xsl:template> 现在,当我尝试从 xml 转换为 pdf 时,出现以下错误: org.apache.fop.fo.extensions.svg.SVGElement.getDimension Could not set base URL for svg java.lang.IllegalArgumentException: URI is not absolute at java.base/java.net.URL.fromURI(URL.java:721) at java.base/java.net.URI.toURL(URI.java:1139) at org.apache.fop.fo.extensions.svg.SVGElement.getDimension(SVGElement.java:77) . . . 那么您能帮我理解为什么我们会看到这个错误吗? 因为您是从命令行运行 FOP,所以您的文档有一个基本 URI。现在您已经证明您的文件系统上可以有 sample.ttf,我建议将完整路径放入 sample.ttf <svg:svg xmlns:svg="w3.org/2000/svg"> <svg:defs> <svg:font-face font-family="sample"> <svg:font-face-src> <svg:font-face-uri href="file:///PATH/for/config/sample.ttf"/> </svg:font-face-src> </svg:font-face> </svg:defs> <svg:text> DRAFT </svg:text> </svg:svg> 从 https://xmlgraphics.apache.org/fop/faq.html#svg-url 来看,FOP 似乎可以从 HTTP URL 找到字体。

回答 1 投票 0

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