xslt 相关问题

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

如何在 XSLT3.0 中为以下代码启用流式传输,因为输入有效负载可能超过 80MB,并且我们正在观察性能问题

问题 当前的问题是,使用下面的 XSLT 代码,当输入有效负载很大(例如 80MB)时,输入有效负载将被加载到内存中,因此会消耗备忘录...

回答 1 投票 0

将 Google 字体添加到 XSLT 中的 <head>

我正在使用 Google Search Appliance 来过滤搜索结果,并且该页面是用 XSLT 编写的。我想链接到 中的 Google 字体,但无法管理。 HTML: 我正在使用 Google Search Appliance 来过滤搜索结果,并且该页面是用 XSLT 编写的。我想在 <head> 中链接到 Google 字体,但无法管理。 HTML: <head> <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600' rel='stylesheet' type='text/css'> </head> 我尝试过的XSL: <xsl:template name="addOpenSansStart"> <xsl:text disable-output-escaping="yes">&lt;head&gt;</xsl:text> <xsl:element name="link"> <xsl:attribute name="href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600'">href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600'</xsl:attribute> <xsl:attribute name="rel='stylesheet'">rel='stylesheet'</xsl:attribute> <xsl:attribute name="type='text/css'">type='text/css'</xsl:attribute> </xsl:element> </xsl:template> <xsl:template name="addOpenSansEnd"> <xsl:text disable-output-escaping="yes">&lt;/head&gt;</xsl:text> <xsl:text> </xsl:text> </xsl:template> 还有: <xsl:template name="addOpenSansStart"> <xsl:text disable-output-escaping="yes">&lt;head&gt;</xsl:text> <xsl:text disable-output-escaping="yes">&lt;link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600' rel='stylesheet' type='text/css' /&gt;</xsl:text> </xsl:template> <xsl:template name="addOpenSansEnd"> <xsl:text disable-output-escaping="yes">&lt;/head&gt;</xsl:text> <xsl:text> </xsl:text> </xsl:template> 两者都给了我错误元素类型“link”必须由匹配的结束标记“</link>”终止。 您会很高兴得知您可以简单地包含要生成的文字标记: <xsl:template name="addOpenSansStart"> <head> <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,600' rel='stylesheet' type='text/css'/> </head> <!-- the rest of your template --> </xsl:template> 如果您确实需要使用 xsl:element 和 xsl:attribute,请意识到 name 属性不应包含该属性的值: <xsl:template name="addOpenSansStart"> <head> <xsl:element name="link"> <xsl:attribute name="href">https://fonts.googleapis.com/css?family=Open+Sans:400,300,600</xsl:attribute> <xsl:attribute name="rel">stylesheet</xsl:attribute> <xsl:attribute name="type">text/css</xsl:attribute> </xsl:element> </head> <!-- the rest of your template --> </xsl:template> 无论哪种方式都适合您。 请注意,如果您需要添加添加 Google 字体时经常使用的预连接链接,或者您想要导入多种字体,则需要通过以下方式编辑这些字体以确保它们是有效的 XHTML/XML: 将所有与号“&”替换为“&” 在“crossorigin”后面添加一个等号,后跟两个双引号 在所有自关闭链接元素的末尾添加尾部斜杠 例如以下 HTML: <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400&family=Raleway:wght@400&display=swap" rel="stylesheet"> 需要转换为: <link rel="preconnect" href="https://fonts.googleapis.com"/> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/> <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400&amp;family=Raleway:wght@400&amp;display=swap" rel="stylesheet"/>

回答 1 投票 0

XSLT:使用关键字段时的排序问题

我在对 LuLineItem 进行排序时遇到问题,我需要在其相应的 Iden/IdenValue 时对其进行排序,其中 IdenType=OCC1 在另一个 LuLineItem 中重复,然后基于 Idenvalue,其中 Identype=

回答 1 投票 0

使用关键字段时的排序问题

我在对 LuLineItem 进行排序时遇到问题,我需要在其相应的 Iden/IdenValue 时对其进行排序,其中 IdenType=OCC1 在另一个 LuLineItem 中重复,然后基于 Idenvalue,其中 Identype=

回答 1 投票 0

XPath 中的逻辑或?为什么不是| (管道符号)工作吗?

我有一个 XSLT 模板,它对所有级别的主题进行计数,用于在我拥有的 DITA 项目中用编号来标记这些主题。 我有一个 XSLT 模板,它对所有级别的主题进行计数,用于在我拥有的 DITA 项目中用编号来标记这些主题。 <xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> </xsl:template> 我正在尝试为计算的内容添加额外的排除项,因为当 topicref 类具有 title 元素且 outputclass 为 noNum 时。 <xsl:template match="*[contains(@class, ' bookmap/chapter ')] | *[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')])]" mode="topicTitleNumber"> <xsl:number format="1 " count="*[contains(@class, ' map/topicref ')] [not(ancestor-or-self::*[contains(@class,' bookmap/frontmatter ')] | *[contains(title/@outputclass, 'noNum')])] | *[contains(@class, ' bookmap/chapter ')]" level="multiple"/> </xsl:template> 如上所示,我在第一个 | *[contains(title/@outputclass, 'noNum')] 语句之后添加了 not,认为这将充当附加条件,在调用模板时,count 调用将跳过(即 ...不是祖先 -或-self 与[criteria] 或标题outputclass 属性为“noNum”的主题...)。然而,我添加的标准似乎被视为模板“确实”匹配并计数的内容。 假设我在最后一点上是正确的,我相信我需要将该条件放在它自己的“not”语句中,但我不确定如何使用 XPath 中已存在的条件来做到这一点。 在 XPath 中 | 是集合并运算符,而不是逻辑 OR。 联合运算符,| XPath 1.0 |运算符计算其操作数的并集,操作数必须是节点集。 XPath 2.0+ union 和 | 运算符是等效的。它们采用两个节点序列作为操作数,并返回一个包含任一操作数中出现的所有节点的序列。 逻辑或,or 使用 or 代替 逻辑 OR . 复杂的 XPath 仍然无法工作? 将其分解为更小的部分: //*[contains(@class, ' bookmap/chapter ')]是否选择了您期望的内容? 对逻辑表达式的每个最基本部分重复单独。 将这些单独验证的术语或谓词一次一个地组合起来,并观察沿途的每一步,都不会出现意外。 在合并附加条款之前修复预期结果与实际结果之间的任何差异。

回答 1 投票 0

如何在 XPath 3.1 和 XSLT 中构建具有错误处理功能的健壮 XML 解析器

我的用例:我想分析一个大型 XML 文档,其中包含名为ownedComment 的元素。每个元素都有一个称为 body 的属性。该属性的内容应该是一个字符串,

回答 1 投票 0

仅在子节点存在时变换标签

我有一个 XML 文件: 原创 ...

回答 1 投票 0

xsltproc (osx)“不是样式表,编译错误”。但 xml 和 xsl 都可以在在线工具上使用

设法让我的 xsl 在 http://www.xmlper.com/ 上工作(很棒的工具,来自其他 stackoverflow 评论的良好推荐)。 但是当我在 m 上运行相同的(现在高度精简的)xml 和 xsl 时...

回答 3 投票 0

XSLT - 比较 2 个文档以匹配父元素和子元素

如果我有以下两个 XML 文档: 未翻译的文件:

回答 1 投票 0

XSLT:创建新的 xml/csv 结构

我想请求您的指导,以更好地实现所需的输出。我有一个我无法控制的 XSLT 文件,我想应用修改初始结构的转换......

回答 1 投票 0

如何在 XSLT 1.0 中迭代唯一记录?

我有一个像这样的xml输入: 123 约翰 我有一个像这样的 xml 输入: <DepartmentData> <Department> <Employees> <Employee> <Id>123</Id> <Name>John</Name> <Incentive>1000</Incentive> </Employee> <Employee> <Id>789</Id> <Name>Mmark</Name> <Incentive>5000</Incentive> </Employee> <Employee> <Id>123</Id> <Name>John</Name> <Incentive>4000</Incentive> </Employee> </Employees> </Department> <Department> <Employees> <Employee> <Id>674</Id> <Name>John</Name> <Incentive>1000</Incentive> </Employee> <Employee> <Id>334</Id> <Name>Mmark</Name> <Incentive>5000</Incentive> </Employee> <Employee> <Id>334</Id> <Name>Mmark</Name> <Incentive>4000</Incentive> </Employee> </Employees> </Department> <Department> <Employees> <Employee> <Id>009</Id> <Name>John</Name> <Incentive>1000</Incentive> </Employee> <Employee> <Id>887</Id> <Name>Mmark</Name> <Incentive>5000</Incentive> </Employee> <Employee> <Id>678</Id> <Name>John</Name> <Incentive>4000</Incentive> </Employee> </Employees> </Department> </DepartmentData> 有多个部门,每个员工记录包含多个员工详细信息。 我需要循环遍历每个部门,然后每个员工将具有相同 emp id 的员工分组,以总结他们的激励。 预期输出: <root> <Emps> <Emp> <id>123</id> <incentive>5000</incentive> </Emp> <Emp> <id>789</id> <incentive>5000</incentive> </Emp> </Emps> <Emps> <Emp> <id>674</id> <incentive>1000</incentive> </Emp> <Emp> <id>334</id> <incentive>9000</incentive> </Emp> </Emps> <Emps> <Emp> <id>009</id> <incentive>1000</incentive> </Emp> <Emp> <id>887</id> <incentive>5000</incentive> </Emp> <Emp> <id>678</id> <incentive>4000</incentive> </Emp> </Emps> </root> 你能帮我如何完成这个任务吗? 尝试检查多个帖子。 我预计可能让您陷入困境的复杂性是给定的 Employee 可以出现在多个 Department 元素中,并且您希望将所有 Employee 元素与给定的 Id 每个 Department 组合在一起。因此,这使得它比 XSLT 1.0 中的大多数“分组”问题更加困难,但实际上通常使用的相同技术也可以在这种情况下工作。 对于更简单的分组情况,您可以定义一个 xsl:key 来匹配 Employee 元素,并使用其 Id 子元素作为键,以便稍后您可以使用它来检索整个 Employee 元素组给定 Id。例如: <xsl:key name="employee-by-id" match="Employee" use="Id"/> 但在这种情况下,您不仅需要按其 Employee 对 Id 元素进行分组,还需要按其 Department 祖先元素对 also 进行分组。例如,您可以像这样定义一个键: <xsl:key name="employee-by-department-and-id" match="Employee" use=" concat( generate-id(ancestor::Department), Id ) "/> NB generate-id() 函数是一种唯一标识任何元素的方法。它经常与xsl:key/@use一起使用。 要迭代给定 Employee/Id 内的 Department 的所有唯一值,您可以选择每个 Employee 内的所有 Department 元素,并使用检查当前 Employee 是否相等的谓词来过滤它们到第一个 Employee 与 Department 标识符和 Id。这将为您提供 distinct Employee 标识符列表。 最后一个难题是为每个员工标识符及其相应的部门标识符调用 key 函数,为您提供一组 Employee 元素,然后您可以按照您需要的任何方式对其进行汇总。 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="true"/> <xsl:key name="employee-by-department-and-id" match="Employee" use=" concat( generate-id(ancestor::Department), Id ) "/> <xsl:template match="/"> <root> <xsl:for-each select="//Department"> <xsl:variable name="department-identifier" select="generate-id(.)"/> <xsl:variable name="unique-employee-identifiers" select=" descendant::Employee[ generate-id(.) = generate-id( key( 'employee-by-department-and-id', concat($department-identifier, Id) ) ) ]/Id "/> <Employees> <xsl:for-each select="$unique-employee-identifiers"> <xsl:variable name="employee-group" select=" key( 'employee-by-department-and-id', concat($department-identifier, .) ) "/> <Employee> <xsl:copy-of select="$employee-group[1]/Id"/> <xsl:copy-of select="$employee-group[1]/Name"/> <Incentive><xsl:value-of select="sum($employee-group/Incentive)"/></Incentive> </Employee> </xsl:for-each> </Employees> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

XSLT 组织列表列表

我正在尝试重新处理列表列表,从 XML 转换为基于 XML 的专有文件格式。 本质上输入是这样的 第 1 项 ... 我正在尝试重新处理列表列表,从 XML 转换为基于 XML 的专有文件格式。 输入本质上是这样的 <ul> <li>Item 1</li> <li><ul><li>Sub item 1</li><li>Sub item 2</li></ul></li> <li>Item 2</li> <li><ul><li>Sub item 3</li><li>Sub item 4</li></ul></li> </ul> 显然看起来像这样: 第 1 项 子项目1子项目2 第 2 项 子项目3子项目4 但我需要将子项目列表放在相同的 li 标签中作为各自的标题。 所以,像这样: 项目 1子项目 1子项目 2 项目 2子项目 3子项目 4 当我测试上面的原始输入时,我似乎无法想出一个 XPATH 来拾取我的第一个子项目ul而不拾取第二个子项目ul。 当通过转换运行它时,这基本上会创建 <ul> <li>Item 1 <ul><li>Sub item 1</li><li>Sub item 2</li></ul> <ul><li>Sub item 3</li><li>Sub item 4</li></ul> </li> <li>Item 2 <ul><li>Sub item 3</li><li>Sub item 4</li></ul> </li> </ul> 让我到目前为止的 XPath 是 following-sibling::li[not(normalize-space(text()))]/*[1][self::ul or self::ol] 归一化空间是隔离一个li,它没有文本,但里面只有ul或ol。我已经尝试了上述的多种变体,设置索引 [1] 只是返回它们全部,[2] 什么也不返回。 我有点困惑,感谢任何意见或建议! 这似乎是一个分组问题,您可以在 XSLT 2 或更高版本(XSLT 的当前版本是 3.0)中使用 for-each-group group-starting-with: 来解决 <xsl:template match="ul[.//ul]"> <xsl:copy> <xsl:for-each-group select="li" group-starting-with="li[not(ul)]"> <xsl:copy> <xsl:apply-templates select="node(), tail(current-group())/*"/> </xsl:copy> </xsl:for-each-group> </xsl:copy> </xsl:template> 示例小提琴是这里。

回答 1 投票 0

XSLT 中嵌套分组中的值求和

我正在尝试在 XSLT 1.0 中进行嵌套分组,但遇到了一些问题,下面是我的 XML 示例代码。 我正在尝试在 XSLT 1.0 中进行嵌套分组,但遇到了一些问题,下面是我的 XML 示例代码。 <?xml version="1.0" encoding="iso-8859-1"?> <INVOICE> <GROUP ID="1"> <GROUP_HEADER_ROW> <COL width="2cm" headerAlign="start" headerFormat="text">Product Name</COL> <COL width="0cm" headerAlign="start" headerFormat="text">Product Code</COL> <COL width="2cm" headerAlign="start" headerFormat="text">Description</COL> <COL width="1cm" headerAlign="start" headerFormat="number">QTY</COL> <COL width="1cm" headerAlign="end" headerFormat="number">Price</COL> <COL width="1cm" headerAlign="end" headerFormat="number">Tax</COL> <COL width="1cm" headerAlign="end" headerFormat="number">Amount</COL> <COL width="3cm" headerAlign="start" headerFormat="text">Account</COL> <COL width="1cm" headerAlign="end" headerFormat="number">VAT</COL> <COL width="2cm" headerAlign="start" headerFormat="text">SubscriptionFromDate</COL> <COL width="2cm" headerAlign="start" headerFormat="text">SubscriptionToDate</COL> <COL width="2cm" headerAlign="start" headerFormat="text">PackageName</COL> <COL width="0cm" headerAlign="start" headerFormat="number">PackageID</COL> <COL width="0cm" headerAlign="start" headerFormat="text">BundleDesc</COL> <COL width="1cm" headerAlign="start" headerFormat="text">Note</COL> </GROUP_HEADER_ROW> <GROUP_DATA_ROW> <COL>Hotline</COL> <COL>ProdCode1</COL> <COL>Subscription</COL> <COL>1</COL> <COL>50</COL> <COL>0</COL> <COL>50</COL> <COL>Account1</COL> <COL/> <COL>2024-09-01T00:00:00.000000-05:00</COL> <COL>2024-09-30T23:59:59.000000-05:00</COL> <COL/> <COL/> <COL>GroupValue2</COL> <COL/> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>Direct Hit Mobile</COL> <COL>ProdCode2</COL> <COL>Subscription</COL> <COL>1</COL> <COL>100</COL> <COL>0</COL> <COL>100</COL> <COL>Account1</COL> <COL/> <COL>2024-09-01T00:00:00.000000-05:00</COL> <COL>2024-09-30T23:59:59.000000-05:00</COL> <COL/> <COL/> <COL>GroupValue2</COL> <COL/> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>Direct Hit Mobile</COL> <COL>ProdCode3</COL> <COL>Subscription</COL> <COL>1</COL> <COL>50</COL> <COL>0</COL> <COL>50</COL> <COL>Account2</COL> <COL/> <COL>2024-09-01T00:00:00.000000-05:00</COL> <COL>2024-09-30T23:59:59.000000-05:00</COL> <COL/> <COL/> <COL>GroupValue2</COL> <COL/> </GROUP_DATA_ROW> <GROUP_DATA_ROW> <COL>Direct Hit</COL> <COL>ProdCode4</COL> <COL>Subscription</COL> <COL>1</COL> <COL>100</COL> <COL>0</COL> <COL>100</COL> <COL>Account2</COL> <COL/> <COL>2024-09-01T00:00:00.000000-05:00</COL> <COL>2024-09-30T23:59:59.000000-05:00</COL> <COL/> <COL/> <COL>GroupValue2</COL> <COL/> </GROUP_DATA_ROW> </GROUP> </INVOICE> 我的目标是创建一个包含以下字段信息组的表格: COL[8] COL[14] COL[10] COL[11] 到目前为止我使用的 xslt 代码如下.. <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="groupAcct" match="/INVOICE/GROUP/GROUP_DATA_ROW" use="COL[8]"/> <xsl:key name="groupBunDesc" match="/INVOICE/GROUP/GROUP_DATA_ROW" use="concat(COL[8],COL[14],COL[10],COL[11])"/> <xsl:template match="INVOICE"> <xsl:for-each select="/INVOICE/GROUP/GROUP_DATA_ROW[count(. | key('groupAcct', COL[8])[1]) = 1]"> <xsl:sort select="COL[8]"/> <xsl:variable name="acctName" select="COL[8]"/> <h1> <xsl:value-of select="$acctName"/> </h1> <table id="{COL[8]}"> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[2]"/> </th> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[3]"/> </th> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[4]"/> </th> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[5]"/> </th> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[6]"/> </th> <th scope="col"> <xsl:value-of select="/INVOICE/GROUP/GROUP_HEADER_ROW/COL[7]"/> </th> <xsl:variable name="testVar" select="key('groupAcct', COL[8])"/> <xsl:for-each select="$testVar[count(. | key('groupBunDesc', concat(COL[8],COL[14],COL[10],COL[11]))[1]) = 1]"> <xsl:if test="COL[14] != ''"> <tr> <xsl:value-of select="COL[14]"/> </tr> <tr> <xsl:value-of select="COL[3]"/> </tr> <tr> <xsl:value-of select="COL[4]"/> </tr> <tr> <xsl:value-of select="COL[5]"/> </tr> <tr> <xsl:value-of select="COL[6]"/> </tr> <tr> <xsl:value-of select="COL[7]"/> </tr> </xsl:if> </xsl:for-each> </table> </xsl:for-each> </xsl:template> </xsl:stylesheet> 此 XSLT 打印的代码已按帐户正确分组,但并未为每个帐户仅打印 1 行,下面是当前输出。 <?xml version="1.0"?> <h1>Account1</h1> <table id="Account1"> <th scope="col">Product Code</th> <th scope="col">Description</th> <th scope="col">QTY</th> <th scope="col">Price</th> <th scope="col">Tax</th> <th scope="col">Amount</th> <tr>GroupValue2</tr> <tr>Subscription</tr> <tr>1</tr> <tr>50</tr> <tr>0</tr> <tr>50</tr> </table> <h1>Account2</h1> <table id="Account2"> <th scope="col">Product Code</th> <th scope="col">Description</th> <th scope="col">QTY</th> <th scope="col">Price</th> <th scope="col">Tax</th> <th scope="col">Amount</th> <tr>GroupValue2</tr> <tr>Subscription</tr> <tr>1</tr> <tr>50</tr> <tr>0</tr> <tr>50</tr> </table> 代码工作正常,但是,我无法对代码中的价格、税收和金额列进行求和。我期待以下输出。 <?xml version="1.0"?> <h1>Account1</h1> <table id="Account1"> <th scope="col">Product Code</th> <th scope="col">Description</th> <th scope="col">QTY</th> <th scope="col">Price</th> <th scope="col">Tax</th> <th scope="col">Amount</th> <tr>GroupValue2</tr> <tr>Subscription</tr> <tr>1</tr> <tr>150</tr> <!-- sum the group values--> <tr>0</tr> <tr>150</tr> <!-- sum the group values--> </table> <h1>Account2</h1> <table id="Account2"> <th scope="col">Product Code</th> <th scope="col">Description</th> <th scope="col">QTY</th> <th scope="col">Price</th> <th scope="col">Tax</th> <th scope="col">Amount</th> <tr>GroupValue2</tr> <tr>Subscription</tr> <tr>1</tr> <tr>150</tr> <!-- sum the group values--> <tr>0</tr> <tr>150</tr> <!-- sum the group values--> </table> 感谢您的帮助和知识。 考虑下面的调整,您可以在其中针对分组变量sum这些数值。此外,通过使用 xsl:apply-templates 您可以减少重复。 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="groupAcct" match="GROUP_DATA_ROW" use="COL[8]"/> <xsl:key name="groupBunDesc" match="GROUP_DATA_ROW" use="concat(COL[8],COL[14],COL[10],COL[11])"/> <xsl:template match="GROUP_HEADER_ROW"> <xsl:apply-templates select="COL[position() &gt;= 2 and position() &lt;= 7]"/> </xsl:template> <xsl:template match="GROUP_HEADER_ROW/COL"> <th scope="col"> <xsl:value-of select="text()"/> </th> </xsl:template> <xsl:template match="INVOICE"> <xsl:for-each select="GROUP/GROUP_DATA_ROW[count(. | key('groupAcct', COL[8])[1]) = 1]"> <xsl:sort select="COL[8]"/> <xsl:variable name="curr-group" select="key('groupAcct', COL[8])" /> <h1> <xsl:value-of select="$curr-group/COL[8]"/> </h1> <table id="{$curr-group/COL[8]}"> <xsl:apply-templates select="ancestor::GROUP/GROUP_HEADER_ROW"/> <xsl:for-each select="$curr-group[count(. | key('groupBunDesc', concat(COL[8],COL[14],COL[10],COL[11]))[1]) = 1]"> <xsl:variable name="child-group" select="key('groupBunDesc', concat(COL[8],COL[14],COL[10],COL[11]))" /> <xsl:if test="COL[14] != ''"> <tr> <xsl:value-of select="COL[14]"/> </tr> <tr> <xsl:value-of select="COL[3]"/> </tr> <tr> <xsl:value-of select="sum($child-group/COL[4])"/> </tr> <tr> <xsl:value-of select="sum($child-group/COL[5])"/> </tr> <tr> <xsl:value-of select="sum($child-group/COL[6])"/> </tr> <tr> <xsl:value-of select="sum($child-group/COL[7])"/> </tr> </xsl:if> </xsl:for-each> </table> </xsl:for-each> </xsl:template> </xsl:stylesheet> 旁白:您所需的输出格式不正确,因为它缺少根并且标签似乎是 HTML 元素,但表行的 <tr> 标签未正确使用。

回答 1 投票 0

如何使用 xslt 1.0 使用新的命名空间前缀复制所有子元素

我的目标是实现输出 xml,其中最初的前 2 个节点具有如下所示的命名空间。 2.0.10 并从消息及其所有子节点 h...

回答 1 投票 0

如何向XML添加可点击的链接?

我正在尝试使 XML 文件中的 URL 可单击。 下面是我的 XML 和 XSL 文件,它们可以很好地协同工作。 我尝试在 XML 文件中使用 XLink 和 href,但没有成功。 我如何让我的U...

回答 2 投票 0

如何使用xsl将cdata添加到xml文件

我正在尝试将 CDATA 包装在 xml 文件中的元素。 我错过的另一点是,有一些具有相同名称的元素需要在添加 CDATA 时转义。 这是源 xml...

回答 1 投票 0

使用 XSLT 更改根元素和命名空间,但保留其他公共命名空间

我正在尝试将 XML 文档转换为具有新根元素的文档,但该文档共享许多其他公共元素名称空间。我在命名空间转换方面遇到麻烦。 这是 inp...

回答 1 投票 0

使用正则表达式进行 XSLT 标记化,仅在分号后面不跟空格和数字时进行标记化

我试图标记这个字符串,为每个书目引文创建单独的条目。问题是,有时分号分隔书目条目,有时它分隔...

回答 1 投票 0

奇怪的字符在 UTF-8 中不显示

在我输入的 xml 名称中具有奇怪的字符,其中 xml 具有 utf-8 输入饲料: 约翰·史蒂芬 当我

回答 1 投票 0

XSLT TRANSFORM,检查后取值并返回根节点

我有以下 XML: 写作 绿色 <

回答 1 投票 0

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