XSLT是XML的一种转换语言,旨在将结构化文档转换为其他格式(如XML,HTML和纯文本,或者在XSLT 3,JSON中)。问题应该根据需要使用xslt-1.0,xslt-2.0或xslt-3.0标记之一。
我将代码放入 XML 验证网站,它给出了以下错误: 第 8 行:4 文档中根元素后面的标记必须格式正确。 有问题的线路...
我希望使用 xslt 从 xml 中删除所有空白标签,除非标签包含空格。此外,对换行符等不应有影响。xml 应按原样复制,除了...
通过 Saxon XSLT API 从 Java 中的 XSLT 过滤数组?
原标题:XSLT“包含”方法未按预期工作 我有这个xml: ...
XSLT For-Each 包装 div 中的每第 n 个项目
我有一系列节点,它们是父节点的直接子节点,我想循环这些节点,但将它们包装在 4 个“组”中。我可能没有非常清楚地表述这一点,所以这可能会有所帮助.. .
我有这个xml: 我有这个xml: <?xml version="1.0" encoding="UTF-8"?> <Document> <tag-one> <tag-two> <tag-three> <tag-four> <tag-five> <tag-six> <tag-seven> <tag-eight> <tag-nine> <id-tag>valid_id</id-tag> </tag-nine> </tag-eight> </tag-seven> </tag-six> </tag-five> </tag-four> </tag-three> </tag-two> <tag-two> <tag-three> <tag-four> <tag-five> <tag-six> <tag-seven> <tag-eight> <tag-nine> <id-tag>invalid_id-invalid_kg</id-tag> </tag-nine> </tag-eight> </tag-seven> </tag-six> </tag-five> </tag-four> </tag-three> </tag-two> </tag-one> </Document> 我正在尝试构建一个 XSLT 文件,如果相应的 tag-two 包含在列表中,则过滤掉 id-tag 元素 <?xml version="1.0" encoding="UTF-8"?> <xsl:transform xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="#all" version="3.0"> <xsl:param name="invalidIds"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="tag-two[contains($invalidIds, tag-three/tag-four/tag-five//*[local-name()='id-tag'])]"> </xsl:template> </xsl:transform> 我使用 saxon 库将 invalidIds 作为 java 代码中的数组列表传递: List<String> idList = Arrays.asList("invalid_id-invalid_kg"); // omitted rest of the code for brevity // Map.of(new QName("invalidIds"), new XdmAtomicValue(idList.toString())) 当我在 xslt 中打印出 invalidIds 值时,我得到了:[invalid_id-invalid_kg]。 问题是它过滤了两个tag-two,因为它看起来像contains方法充当“字符串”包含,而不是“数组”包含,这意味着“valid_id”匹配条件...你有吗知道我该如何解决这个问题吗? 在您的 Java 列表上使用 https://www.saxonica.com/html/documentation12/javadoc/net/sf/saxon/s9api/XdmValue.html#makeSequence(java.lang.Iterable) Map.of(new QName("invalidIds"), XdmValue.makeSequence(idList))。
我总共有 10 个详细信息元素,如下所示,因为我想根据指标计划值拆分和排列代码元素值。 0... 我总共有 10 个 Detail 元素,如下所示,因为我想根据指标 Code 值拆分和排列 Plan 元素值。 <Details> <Detail> <Code>001</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>002</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>003</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>004</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>005</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>006</Code> <Type>Alt</Type> <Plan>Y</Plan> </Detail> <Detail> <Code>007</Code> <Type>Alt</Type> <Plan>Y</Plan> </Detail> <Detail> <Code>008</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>009</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>010</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> </Details> 每页我只需要 5 个代码或行来允许,因为我希望 Plan='N' 代码应该放在第一位,Plan='Y' 代码应该放在下面,我已经尝试了下面的代码 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="3.0" exclude-result-prefixes="xs"> <xsl:template match="Details"> <xsl:call-template name="Table_Left"> <xsl:with-param name="start_row" as="xs:integer">1</xsl:with-param> <xsl:with-param name="end_row" as="xs:integer">10</xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template name="Table_Left"> <xsl:param name="start_row" as="xs:integer">0</xsl:param> <xsl:param name="end_row" as="xs:integer">0</xsl:param> <xsl:variable name="Details" select="Details"/> <xsl:variable name="total_rows"> <xsl:value-of select="count($Details//Detail[Type = 'Alt'])"/> </xsl:variable> <xsl:variable name="sorted_plans_alt" as="element()"> <sorted_plans> <xsl:for-each select="$Details//Detail[Type = 'Alt']"> <xsl:sort select=".//Detail[Type = 'Alt']" order="ascending" data-type="number"/> <xsl:sequence select="."/> </xsl:for-each> </sorted_plans> </xsl:variable> <xsl:variable name="plans_subset"> <xsl:sequence select=" subsequence($sorted_plans_alt//Detail[Type = 'Alt'], $start_row, $end_row)" /> </xsl:variable> <xsl:variable name="preceding_plan" as="element()"> <preceding_plan> <xsl:choose> <xsl:when test="$start_row = 1"> <empty/> </xsl:when> <xsl:otherwise> <xsl:sequence select="subsequence($sorted_plans_alt//Detail[Type = 'Alt'], $start_row - 1, 1)" /> </xsl:otherwise> </xsl:choose> </preceding_plan> </xsl:variable> <xsl:variable name="rows_to_output" as="xs:integer"> <xsl:variable name="number_of_r_plans" as="xs:integer"> <xsl:value-of select="count($Details//Detail[Type = 'Alt'])"/> </xsl:variable> <xsl:choose> <xsl:when test="$number_of_r_plans > 0"> <xsl:value-of select="$end_row - 5"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$end_row"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="left_table" as="element()"> <xsl:for-each select="($plans_subset//Detail[Type = 'Alt'][Plan='N'])[position() <= $rows_to_output]"> <xsl:value-of select="current()/Code"/> </xsl:for-each> <xsl:for-each select="($plans_subset//Detail[Type = 'Alt'][Plan='Y'])[position() <= $rows_to_output]"> <xsl:value-of select="current()/Code"/> </xsl:for-each> </xsl:variable> <xsl:variable name="right_table"> <topic id="topic_1" xml:lang="en-US"> <xsl:apply-templates select="$left_table/*"/> </topic> </xsl:variable> <xsl:sequence select="$right_table"/> <xsl:choose> <xsl:when test="$start_row + $rows_to_output <= $total_rows"> <xsl:call-template name="Table_Left"> <xsl:with-param name="start_row" as="xs:integer" select="$start_row + $rows_to_output"/> <xsl:with-param name="end_row" as="xs:integer" select="$end_row"/> </xsl:call-template> </xsl:when> <xsl:when test="$start_row = 999"/> </xsl:choose> </xsl:template> </xsl:stylesheet> 在下面的输出中,我在第一页中得到 7 个代码(即使在 xsl 中提到,每页也只有 5 个代码)。但我也收到了 Plan='Y'(006 和 007)代码。 1st page 2nd page 001 008 002 009 003 010 004 005 006 007 预期输出如下,第一页有 5 个代码,第二页有剩余代码。我需要 Plan=N 代码应该放在第一位,Plan=Y 代码应该放在后面 1st page 2nd page 001 008 002 009 003 010 004 006 005 007 预期输出的格式不清楚。 尝试以下方法: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/Details"> <!-- sort plan N first --> <xsl:variable name="sorted"> <xsl:perform-sort> <xsl:sort select="Plan='Y'"/> <xsl:sequence select="Detail"/> </xsl:perform-sort> </xsl:variable> <!-- output in groups of 5 per page --> <output> <xsl:for-each-group select="$sorted/Detail" group-adjacent="(position() - 1) idiv 5"> <page> <xsl:copy-of select="current-group()/Code"/> </page> </xsl:for-each-group> </output> </xsl:template> </xsl:stylesheet> 使用提供的输入,输出将是: <?xml version="1.0" encoding="UTF-8"?> <output> <page> <Code>001</Code> <Code>002</Code> <Code>003</Code> <Code>004</Code> <Code>005</Code> </page> <page> <Code>008</Code> <Code>009</Code> <Code>010</Code> <Code>006</Code> <Code>007</Code> </page> </output> 我不清楚你到底想要什么输出,但这里有一些关于你的代码的观察结果,其中一些纯粹是风格上的。 <xsl:with-param name="start_row" as="xs:integer">1</xsl:with-param> 使用 <xsl:with-param name="start_row" as="xs:integer" select="1"/> 它避免了类型转换(从文本节点到整数)。有些人主张始终使用 as 子句,但我会将其留在这里,因为很明显 select="1" 会给您一个 xs:integer。 <xsl:variable name="total_rows"> <xsl:value-of select="count($Details//Detail[Type = 'Alt'])"/> </xsl:variable> 使用 <xsl:variable name="total_rows" select="count($Details/Detail[Type = 'Alt'])"/> 您确实不想在这里构建 XML 文档,您想计算一个整数。 当您知道 // 元素将是 Detail 的直接子元素时,搜索所有后代 (Details) 是没有意义的。 <xsl:for-each select="$Details//Detail[Type = 'Alt']"> <xsl:sort select=".//Detail[Type = 'Alt']" 这是错误的。排序键是相对于您要排序的元素计算的,您的选择表达式不会选择任何内容。我不知道如何纠正它,因为我不知道你真正想要排序的内容。 <xsl:variable name="left_table" as="element()"> <xsl:for-each select="($plans_subset//Detail[Type = 'Alt'][Plan='N'])[position() <= $rows_to_output]"> <xsl:value-of select="current()/Code"/> </xsl:for-each> <xsl:for-each select="($plans_subset//Detail[Type = 'Alt'][Plan='Y'])[position() <= $rows_to_output]"> <xsl:value-of select="current()/Code"/> </xsl:for-each> </xsl:variable> 这是错误的,因为您的变量将由文本节点组成(由 xsl:value-of 生成,而不是元素)。也许您有意xsl:copy-of。 current()/Code 是 Code 的一种冗长说法。 恐怕这些都是细节问题,我怀疑我只见树木不见森林。我怀疑有一些更根本的问题;我不明白你想要实现什么,但我在需求中没有看到任何表明递归命名模板是实现它的适当方法。
如何将单行中的值分成多行,以及在xslt 3.0中删除重复项
输入: RIO_CBI_TE01_1 RIO_CBI_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01_1 RIO_ATC_TE01 _1 RIO_ATC_TE01_1...
如何将元素的所有值存储在变量中,然后在 xslt 中检查该变量的特定值
我有一个 xml 文件,其中包含两个元素“employeeID”和“managerID”。我想检查employeeID 中的任何值中是否不存在managerID,然后将managerID 的值替换为“Not Found”。 ...
我需要使用 xslt 替换字符 ' 和 "。我需要在 xml 文件中的整个文本中替换它们。' 字符应替换为 " 但仅限于表达式,在 ' 是 o 的一部分的情况下...
PHP - 是否可以使用 xslt 转换将 XML 文件转换为 XSL 文件
我正在尝试使用 xsl 转换基于 XML 配置文件生成 XSL 文件。 这是我的输入。 我正在尝试使用 xsl 转换基于 XML 配置文件生成 XSL 文件。 这是我的意见。 <front> <sample1/> <sample2/> <sample3> <item1/> <item2/> <item3/> <item4/> </sample3> <sample4/> </front> 我期待得到像这样的 xsl 文件, <xsl:template match="//div[@class='front']"> <xsl:apply-templates select=".//*[@class='sample1']"/> <xsl:apply-templates select=".//*[@class='sample2']"/> <xsl:apply-templates select=".//*[@class='sample3']"/> <xsl:apply-templates select=".//*[@class='sample4']"/> </xsl:template> <xsl:template match="//*[@class='sample3']"> <xsl:apply-templates select=".//*[@class='item1']"/> <xsl:apply-templates select=".//*[@class='item2']"/> <xsl:apply-templates select=".//*[@class='item3']"/> <xsl:apply-templates select=".//*[@class='item4']"/> </xsl:template> 可以使用xsl转换来完成吗?主要思想是每次我在配置文件中进行更改时,我不需要编写 xsl 文件。它应该被生成。如果我做出改变, <front> <sample1/> <sample2/> <sample4/> <sample3> <item1/> <item2/> <item4/> <item3/> </sample3> </front> xsl 应该是, <xsl:template match="//div[@class='front']"> <xsl:apply-templates select=".//*[@class='sample1']"/> <xsl:apply-templates select=".//*[@class='sample2']"/> <xsl:apply-templates select=".//*[@class='sample4']"/> <xsl:apply-templates select=".//*[@class='sample3']"/> </xsl:template> <xsl:template match="//*[@class='sample3']"> <xsl:apply-templates select=".//*[@class='item1']"/> <xsl:apply-templates select=".//*[@class='item2']"/> <xsl:apply-templates select=".//*[@class='item4']"/> <xsl:apply-templates select=".//*[@class='item3']"/> </xsl:template> 任何帮助将不胜感激。预先感谢! XSLT 规范本身中有一个使用 XSLT 生成样式表的示例:https://www.w3.org/TR/xslt/#element-namespace-alias 尝试类似: XSLT 1.0 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> <xsl:template match="/"> <axsl:stylesheet version="1.0"> <xsl:apply-templates/> </axsl:stylesheet> </xsl:template> <xsl:template match="/*"> <axsl:template match="div[@class='{name()}']"> <xsl:apply-templates mode="apply"/> </axsl:template> <xsl:apply-templates select="*[*]"/> </xsl:template> <xsl:template match="*"> <axsl:template match="*[@class='{name()}']"> <xsl:apply-templates mode="apply"/> </axsl:template> <xsl:apply-templates select="*[*]"/> </xsl:template> <xsl:template match="*" mode="apply"> <axsl:apply-templates select=".//*[@class='{name()}']"/> </xsl:template> </xsl:stylesheet> 注意: 前导 // 在匹配模式中完全是多余的; 您确定要在 .// xsl:apply-templates表达式中使用 select 吗?
我有一个两步构建过程。在第一步中,我想将符合定义良好的 XSD 模式的小型 XML 文件中的配置读取到 XSLT 样式表中,然后输出另一个
错误:无法找到或加载主类net.sf.saxon.Transform
编辑 我有一个 XSLT 将我的 xml 转换为 html 格式(我对 XSLT 一无所知,我有一个已经由某人编写的)。 这就是我在命令行中所做的 java -Xss2m -X...
这是一个棘手的问题。 我有以下 XML 这是一个棘手的问题。 我有以下 XML <test> <testElement SomeAttribute="<otherxml><otherElement>test test</otherElement></otherxml>"> </testElement> </test> 使用 XSLT,我想转换此 XML 以获得以下结果。 <test> <testElement> <SomeAttributeTransformedToElement> <otherxml> <otherElement>test test</otherElement> </otherxml> </SomeAttributeTransformedToElement> </testElement> </test> 基本上,属性中的某些文本必须转换为最终 XML 中的实际元素 有什么想法如何在 XSLT 中实现这一点吗? 亚历克斯 您可以通过禁用输出转义来实现这一点。但是,请注意,您的输入文档不是有效的 XML 文档(< 的属性值非法,需要转义)。因此,我更改了您的输入文档如下: 输入文档 <?xml version="1.0" encoding="utf-8"?> <test> <testElement SomeAttribute="<otherxml><otherElement>test test</otherElement></otherxml>"> </testElement> </test> 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" indent="yes"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="@SomeAttribute"> <SomeAttributeTransformedToElement> <xsl:value-of select="." disable-output-escaping="yes"/> </SomeAttributeTransformedToElement> </xsl:template> </xsl:stylesheet> 请注意,使用 disable-output-escaping="yes" 不再保证生成的输出文档是格式良好的 XML 文档。 我有同样的需求,我终于成功地构建了一些可以工作的东西。 但是,它还远非完美。但由于这个解决方案对我有用(并且对我来说非常有用),所以我将其提供给任何也可能感兴趣的人。 我希望 XSL 纯粹主义者能够原谅我: 此 XSLT 命名模板采用文本变量作为输入,并在输出上生成 XML 元素。 警告:有一些限制: XML 不得包含自包含元素(... 是禁止的,因为“a”元素包含另一个“a”) XML 必须规范化(元素名称和属性之间有一个空格,因此允许 ,但不允许 (这可以修复) <element /> 样式尚未处理(抱歉,我不需要它,而且我当前的项目有点忙),但这很容易修复。 所以你已经被警告:在测试它并确保它对你的情况来说难以辨认之前,不要将其投入生产。另外,如果您碰巧修复或改进了此脚本,请告诉我。 这是模板: <xsl:template name="t-convert"> <xsl:param name="TEXT"/> <xsl:choose> <xsl:when test="starts-with($TEXT,'<?')"> <xsl:call-template name="t-convert"> <xsl:with-param name="TEXT" select="substring-after($TEXT,'?>')"/> </xsl:call-template> </xsl:when> <!-- Si le texte contient encore des elements --> <xsl:when test="contains($TEXT,'<')"> <xsl:variable name="before-first-open" select="substring-before($TEXT,'<')"/> <xsl:variable name="after-first-open" select="substring-after($TEXT,'<')"/> <!-- On ecrit le texte qui précéde l'élément --> <xsl:value-of select="$before-first-open"/> <!-- Le nom de l'élément --> <xsl:variable name="TRAD" select="translate($after-first-open,'>',' ')"/> <!-- TODO : Gere le cas <ELEMENT /> --> <xsl:variable name="ELEMENT" select="substring-before($TRAD,' ')"/> <xsl:variable name="suite" select="substring-after($after-first-open,$ELEMENT)"/> <xsl:variable name="DEFINITION" select="substring-before($suite,'>')"/> <xsl:variable name="CONTENT" select="substring-after(substring-before($suite,concat('</',$ELEMENT)),concat($DEFINITION,'>'))"/> <xsl:variable name="FOLLOWING"> <xsl:choose> <xsl:when test="substring($DEFINITION,string-length($DEFINITION))='/'"><!-- ends-with($DEFINITION,'/') not compatible with all XSLT version --> <xsl:value-of select="substring-after($suite,'/>')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="substring-after(substring-after($suite,concat('</',$ELEMENT)),'>')"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:element name="{$ELEMENT}"> <xsl:call-template name="t-attribs"> <xsl:with-param name="TEXT" select="$DEFINITION"/> </xsl:call-template> <xsl:call-template name="t-convert"> <xsl:with-param name="TEXT" select="$CONTENT"/> </xsl:call-template> </xsl:element> <xsl:call-template name="t-convert"> <xsl:with-param name="TEXT" select="$FOLLOWING"/> </xsl:call-template> </xsl:when> <!-- no more element --> <xsl:otherwise> <xsl:value-of select="$TEXT"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="t-attribs"> <xsl:param name="TEXT"/> <xsl:if test="contains($TEXT,'=')"> <!-- Assert TEXT=' NAME="VALUE".*' --> <xsl:variable name="NAME" select="substring-after(substring-before($TEXT,'='),' ')"/> <xsl:variable name="afterName" select="substring-after($TEXT,'="')"/> <xsl:variable name="VALUE" select="substring-before($afterName,'"')"/> <xsl:variable name="FOLLOWING" select="substring-after($afterName,'"')"/> <xsl:attribute name="{$NAME}"> <xsl:value-of select="$VALUE"/> </xsl:attribute> <xsl:call-template name="t-attribs"> <xsl:with-param name="TEXT" select="FOLLOWING"/> </xsl:call-template> </xsl:if> </xsl:template> 它的调用方式是: <xsl:call-template name="t-convert"> <xsl:with-param name="TEXT" select="//content"/> </xsl:call-template> 我希望这对世界上至少一个人有帮助(对我来说!) 如果你有这样的参数或变量 <xsl:param name="paramName" /> 您可以像这样使用 disable-output-escaping 属性 <xsl:value-of select="$paramName" disable-output-escaping="yes"/>
您能否帮助解决“此 JAXP 实现或更早版本不支持 setXIncludeAware:class org.apache.xerces.jaxp.SAXParserFactoryImpl”问题
xsl 处理器 xsltproc。使用 --stringparam 的正确方法是什么?
我正在尝试将 shell 变量的值传递给 xsltproc 实例。文件 text.xsl 包含: 我试图将 shell 变量的值传递给 xsltproc 实例。文件 text.xsl 包含: #功能符合预期 $回显$BOOST_ROOT /用户/robertramey/WorkingProjects/modular-boost #按预期通过首次导入。 #but 第二次失败,因为未设置 BOOST_ROOT $xsltproc --max深度 6000 --xinclude --nonet test.xsl 警告:无法加载外部实体“文件:$BOOST_ROOT/tools/boostbook/xsl/docbook.xsl” #按预期通过第一次导入 #第二次失败 - 不出乎意料 $xsltproc --maxdepth 6000 --stringparam BOOST_ROOT "/Users/robertramey/WorkingProjects/modular-boost" --xinclude --nonet test.xsl 警告:无法加载外部实体“文件:$BOOST_ROOT/tools/boostbook/xsl/docbook.xsl” 编译错误:文件 test.xsl 第 4 行元素导入 xsl:import :无法加载文件:$BOOST_ROOT/tools/boostbook/xsl/docbook.xsl 这是为什么呢?我需要做什么才能使这项工作成功? $cat bb2db.xsl 有效。 但它依赖全局 URL 来查找要导入的文件。 这使得我的脚本依赖于我希望避免的互联网连接。 我想参考本地目录: 由于 shell 变量保存了我想要导入的所需 xml 样式表的基本路径。 看起来我可能有它!!!: xsltproc --maxdepth 6000 --path "$BOOST_ROOT/tools/boostbook/xsl" --xinclude --nonet test.xsl test.xsl 包含:
由于某些原因,和 由于某些原因,<fo:static-content flow-name="xsl-region-before">和<fo:flow flow-name="xsl-region-body" space-before="0pt" margin-top ="0pt" padding-top="0pt">之间会自动添加边距。 如何删除它? <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm" margin="10mm"> <fo:region-body margin-top="20mm" margin-bottom="20mm"/> <fo:region-before extent="20mm"/> <fo:region-after extent="20mm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4"> <fo:static-content flow-name="xsl-region-before"> <fo:block-container width="539.3px" height="20px" padding="0px" margin="0px" border-bottom="1pt solid black"> <fo:block> <fo:inline font-family="arialBold" font-size="18px" font-weight="bold" color="#000000"> Задачи обработки отправлений </fo:inline> <fo:inline font-family="arial" font-size="8px" color="#000000"> Страница <fo:page-number/>/<fo:page-number-citation ref-id="end-of-doc"/> </fo:inline> <fo:leader leader-length="37px"/> <fo:inline font-family="arial" font-size="18px" font-weight="bold" color="#000000"> <xsl:value-of select="AppealPrintFormList/currentDate"/> в <xsl:value-of select="AppealPrintFormList/currentTime"/> </fo:inline> </fo:block> </fo:block-container> </fo:static-content> <fo:flow flow-name="xsl-region-body" space-before="0pt" margin-top="0pt" padding-top="0pt"> <xsl:for-each select="AppealPrintFormList/AppealPrintForm"> <fo:table table-layout="fixed" width="556px"> <fo:table-column column-width="91px"/> <fo:table-column column-width="162px"/> <fo:table-column column-width="37.5%"/> <fo:table-body> <fo:table-row> <fo:table-cell padding="0px"> <fo:block font-family="arial" font-size="12px" font-weight="bold"> <xsl:value-of select="clientSystemOrderNumber"/> </fo:block> <fo:block font-family="arial" font-size="8px" color="#7F7F7F" font-weight="bold"> <xsl:value-of select="appealType"/> </fo:block> </fo:table-cell> <fo:table-cell padding="0px"> <fo:block font-family="arial" font-size="8px" color="#000000"> Получ.: <xsl:value-of select="contactPhone"/> </fo:block> <fo:block font-family="arialBold" font-size="8px" color="#000000"> Отпр.: <xsl:value-of select="sender"/> </fo:block> </fo:table-cell> <fo:table-cell padding="0px"> <fo:block-container margin-left="12.5px" padding="0px" text-align="left" start-indent="0px" end-indent="0px"> <fo:block margin="0px" padding="0px"> <fo:inline font-family="arialBold" font-weight="bold" font-size="8px" color="#000000"> <xsl:value-of select="barcode"/> </fo:inline> <fo:leader leader-length="6px"/> <fo:inline font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="ukdRegisterWeight"/> кг </fo:inline> <fo:leader leader-length="4px"/> <fo:inline font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="routeName"/> </fo:inline> </fo:block> <fo:block margin="0px" padding="0px"> <fo:inline font-family="arialBold" font-size="8px" color="#000000"> <xsl:value-of select="mailType"/> </fo:inline> <fo:leader leader-length="6px"/> <fo:inline font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="rpoStatus"/> кг </fo:inline> <fo:leader leader-length="6px"/> <fo:inline font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="deliveryDate"/> </fo:inline> </fo:block> </fo:block-container> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> <fo:table table-layout="fixed" width="556px" space-before="8px"> <fo:table-column column-width="50%"/> <fo:table-column column-width="25%"/> <fo:table-column column-width="22%"/> <fo:table-body> <fo:table-row> <fo:table-cell padding="0px"> <fo:block font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="essence"/> </fo:block> </fo:table-cell> <fo:table-cell padding="0px"> <fo:block font-family="arial" font-size="8px" color="#000000"> <xsl:value-of select="zoneDescription"/> </fo:block> <fo:block font-family="arial" font-size="8px" color="#7F7F7F"> Текущая зона </fo:block> </fo:table-cell> <fo:table-cell padding="0px"> <fo:block-container border-bottom="0.4px solid black" height="10px" width="100%"> <fo:block> </fo:block> </fo:block-container> <fo:block font-family="arial" margin-top="1px" font-size="8px" color="#7F7F7F"> Новая зона </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> <fo:block-container space-before="5px" space-after="8px" border="0.4pt dashed black" width="100%"> <fo:block> </fo:block> </fo:block-container> </xsl:for-each> <fo:block id="end-of-doc"/> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> </xsl:stylesheet> 我尝试通过设置 <fo:static-content flow-name="xsl-region-before" space-after="0pt" padding="0px" margin="0px"> 和 <fo:flow flow-name="xsl-region-body" space-before="0pt" margin-top="0pt" padding-top="0pt"> 来删除所有缩进,但这没有帮助。 你的区域主体有一个边距。流动在该区域内。 您尝试过使用负边距吗? 前任。顶部边距=“-10pt”
使用 XSLT 文件将 XML 文件转换为 CSV - 创建列
任务是编写一个转换,以 HTML 文件和 CSV 文件列出三个文件夹的内容。 HTML 部分已完成,我现在正在处理 CSV 部分。我设法...