xslt 相关问题

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

如何使用 DITA Open Toolkit 检索和使用 AntennaHouse PDF 生成中的章节编号?

我是样式表开发的新手,我的方法仍然是反复试验。 目前我正在尝试检索章节的编号(styleshe 中已经有一个模板...

回答 1 投票 0

sep=";"语句破坏了 XSL 生成的 CSV 文件中的 utf8 BOM

我目前正在使用 XSLT 开发 CSV 导出。在我的例子中,CSV 文件将与 Excel 一起使用 %99%,因此我必须考虑 Excel 的行为。 我的第一个问题是......中的德语特殊字符

回答 4 投票 0

子节点的 XML 到 CSV

下面的 XSLT 代码能够从 XML 转换为带引号的 CSV,但子节点(详细信息)出现在同一行中。 XML输入 下面的 XSLT 代码能够从 XML 转换为带引号的 CSV,但子节点(详细信息)出现在同一行中。 XML 输入 <?xml version="1.0" encoding="UTF-8"?> <Root> <Records> <TrRecords> <RecordID>0123</RecordID> <SequnceNumber>00001</SequnceNumber> <TNumber>00001</TNumber> <System>01</System> <Amount>4956.00</Amount> <Reference>T</Reference> <Account>89768</Account> <Name>bdi</Name> <Other2/> <Other3/> <Details> <RecordID>1234</RecordID> <SequnceNumber>00001</SequnceNumber> <TNumber>00001</TNumber> <Number>TI</Number> <InvoiceDate>2024-05-05</InvoiceDate> <InvoiceDescription/> <InvoiceAmount>10.00</InvoiceAmount> </Details> </TrRecords> <TrRecords> <RecordID>0123</RecordID> <SequnceNumber>00001</SequnceNumber> <TNumber>00002</TNumber> <System>01</System> <Amount>523.00</Amount> <Reference>TI</Reference> <Account>18907</Account> <Name>elci</Name> <Other2/> <Other3/> <Details> <RecordID>1234</RecordID> <SequnceNumber>00001</SequnceNumber> <TNumber>00001</TNumber> <Number>TIR</Number> <InvoiceDate>2024-08-17</InvoiceDate> <InvoiceDescription/> <InvoiceAmount>5245.00</InvoiceAmount> </Details> </TrRecords> <TrRecords> <RecordID>0123</RecordID> <Number>00001</Number> <TNumber>00003</TNumber> <System>01</System> <Amount>1180.00</Amount> <Reference>EMI</Reference> <AccountNo>0936201002941</AccountNo> <Other2/> <Other3/> <Details> <RecordID>1234</RecordID> <SequnceNumber>00001</SequnceNumber> <TNumber>00001</TNumber> <Number>Tac</Number> <InvoiceDate>2024-08-17</InvoiceDate> <InvoiceDescription/> <InvoiceAmount>1180.00</InvoiceAmount> </Details> </TrRecords> </Records> </Root> XSLT 代码 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="utf-8" /> <xsl:param name="delim" select="','" /> <xsl:param name="quote" select="'&quot;'" /> <xsl:param name="break" select="'&#xA;'" /> <xsl:template match="/Root"> <xsl:apply-templates select="Records/TrRecords" /> </xsl:template> <xsl:template match="TrRecords"> <xsl:apply-templates /> <xsl:if test="following-sibling::*"> <xsl:value-of select="$break" /> </xsl:if> <xsl:for-each select="Details"> <xsl:if test="following-sibling::*"> <xsl:value-of select="$break" /> </xsl:if> </xsl:for-each> </xsl:template> <xsl:template match="*"> <!-- remove normalize-space() --> <xsl:value-of select="concat($quote, normalize-space(), $quote)" /> <xsl:if test="following-sibling::*"> <xsl:value-of select="$delim" /> </xsl:if> </xsl:template> <xsl:template match="text()" /> </xsl:stylesheet> 输出 "0123","00001","00001","01","4956.00","T","89768","bdi","","","","","","", “”、“”、“”、“1234 00001 00001 TI 2024-05-05 10.00” "0123","00001","00002","01","523.00","TI","18907","elci","","","","","","", "","","","1234 00001 00001 TIR 2024-08-17 5245.00" "0123","00001","00003","01","1180.00","EMI","0936201002941","","","","","","",""," ","","1234 00001 00001 塔克 2024-08-17 1180.00" 在 1234 的每一行中,值应换行并用引号引起来。你能帮我解决这个问题吗? 问候, 贾纳尔丹 尝试类似: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="utf-8" /> <xsl:param name="delim" select="','" /> <xsl:param name="quote" select="'&quot;'" /> <xsl:param name="break" select="'&#xA;'" /> <xsl:template match="/Root"> <xsl:apply-templates select="Records/TrRecords" /> </xsl:template> <xsl:template match="TrRecords"> <xsl:apply-templates select="* except Details"/> <xsl:value-of select="$break" /> <xsl:apply-templates select="Details/*"/> <xsl:if test="position()!=last()"> <xsl:value-of select="$break" /> </xsl:if> </xsl:template> <xsl:template match="*"> <xsl:value-of select="concat($quote, normalize-space(), $quote)" /> <xsl:if test="position()!=last()"> <xsl:value-of select="$delim" /> </xsl:if> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

标头值在每个循环中出现两次

由于我得到了第二个标题两次 由于 ,我两次获得第二个标头 输入提要具有多个元素,因为我需要根据 Plan 值设置两个标题 <Details> <Detail> <Code>001</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>002</Code> <Type>Alt</Type> <Plan>Y</Plan> </Detail> <Detail> <Code>003</Code> <Type>Alt</Type> <Plan>Y</Plan> </Detail> <Detail> <Code>004</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> <Detail> <Code>005</Code> <Type>Alt</Type> <Plan>N</Plan> </Detail> </Details> 我尝试过的Xsl代码如下: <?xml version="1.0" encoding="UTF-8" ?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="Details"> <table> <tbody> <xsl:for-each select="Detail"> <xsl:sort select="Plan" order="ascending"/> <xsl:choose> <xsl:when test="position() = 1 and current()/Plan='N'"> <row> <entry> <p><b>Plan A</b></p> </entry> </row> </xsl:when> <xsl:when test="position() != 1 and current()/Plan='Y'[1]"> <row> <entry> <p><b>Plan B</b></p> </entry> </row> </xsl:when> </xsl:choose> <row> <entry> <p> <xsl:value-of select="current()/Code"/> </p> </entry> </row> </xsl:for-each> </tbody> </table> </xsl:template> </xsl:transform> 对于我在xsl中提到的计划B标头来选择第一行,但是每个代码值都会出现两次,预期输出应该是 <table> <tbody> <row> <entry> <p><b>Plan A</b></p> </entry> </row> <row> <entry> <p>001</p> </entry> </row> <row> <entry> <p>004</p> </entry> </row> <row> <entry> <p>005</p> </entry> </row> <row> <entry> <p><b>Plan B</b></p> </entry> </row> <row> <entry> <p>002</p> </entry> </row> <row> <entry> <p>003</p> </entry> </row> </tbody> </table> 我想我会采取不同的方法: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/Details"> <table> <tbody> <xsl:for-each-group select="Detail" group-by="Plan"> <xsl:sort select="Plan"/> <row> <entry> <p> <b> <xsl:value-of select="if(Plan='N') then 'Plan A' else 'Plan B'"/> </b> </p> </entry> </row> <xsl:for-each select="current-group()"> <row> <entry> <p> <xsl:value-of select="Code"/> </p> </entry> </row> </xsl:for-each> </xsl:for-each-group> </tbody> </table> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

XSLT:应用 xml 转换,然后进行另一个文本转换

尽管有多个线程解释了在同一 xslt 文件中使用多个模板,但我找不到解决我的问题的解决方案。 我想对我的......应用两个转换

回答 1 投票 0

XSLT:根据条件求和并删除xml节点

我目前正在进行一项棘手的转换,其中我需要在文章出现两次时对游戏文章的价格值进行求和,并从输出中排除第二篇文章。

回答 1 投票 0

如何在 XML 文件中嵌入 svg 图像并将其转换为 HTML

我正在使用 XML 文件来存储一些生成的数据和绘图。这些图是 svg 图像,我想使用 XSLT 将 XML 文件转换为 HTML,并内联嵌入 SVG 图。是吗

回答 1 投票 0

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