xslt-grouping 相关问题

分组特定于XSLT的机制。应始终使用xslt-1.0,xslt-2.0或xslt-3.0标记进行补充,以指示使用的版本。

仅将系列中的某些项目分组章节标题

我有一个 XML 文档,其中包含一系列段落: 章节标题 ... 我有一个包含一系列段落的 XML 文档: <section> <title>Section title</title> <p style="Body">...</p> <p style="Body">...</p> <p style="Note">...</p> <p style="Body">...</p> <p style="Body">...</p> <p style="Warning">...</p> <p style="Warning">...</p> <p style="Warning">...</p> <p style="Body">...</p> <p style="Note">...</p> <p style="Warning">...</p> <p style="Body">...</p> </section> 我想将 3 个相邻的警告段落分组(这样我就可以将格式应用于整个组,例如将它们放在 div 内,这样我就可以在它们周围放置边框)。必须保留元素的顺序。 <section> <title>Section title</title> <p style="Body">...</p> <p style="Body">...</p> <p style="Note">...</p> <p style="Body">...</p> <p style="Body">...</p> <div> <p style="Warning">...</p> <p style="Warning">...</p> <p style="Warning">...</p> </div> <p style="Body">...</p> <p style="Note">...</p> <p style="Warning">...</p> <p style="Body">...</p> </section> 我在使用 for-each-group 指令时遇到问题: <xsl:for-each-group select="*" group-adjacent="@stylename"> (wrap in div here) 这给了我一个错误,因为标题元素没有 @stylename 属性。 我不能这样做 for-each-group select="p" 因为这样标题元素根本就没有被处理。 如何处理该部分中的所有元素,但仅按段落的 @stylename 进行分组? 您遇到什么错误?如果您只想将 p 分组到 style="warning" 中,为什么不将其放在 group-adjacent 中? 示例: <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" expand-text="yes"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:mode on-no-match="shallow-copy"/> <xsl:template match="section"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:for-each-group select="*" group-adjacent="@style='Warning'"> <xsl:choose> <xsl:when test="@style='Warning' and count(current-group()) > 1"> <div> <xsl:apply-templates select="current-group()"/> </div> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="current-group()"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

使用 XSLT 合并/连接共享属性值的相邻标签,而不会丢失子标签

我有 XHTML 内容,其中存在具有相同 href 值的相邻锚标记,需要合并。我一直在尝试找出一种使用 XSL 模板执行此操作的方法,但遇到了

回答 1 投票 0

如何从 XML 有效负载中读取特定字段,该有效负载再次出现在主 XML 有效负载的字段中

需要帮助来读取字段之一内的 XML 有效负载。 请求有效负载: 需要帮助来读取字段之一内的 XML 有效负载。 请求负载: <?xml version="1.0" encoding="UTF-8"?> <Code xmlns:ns0="http://example.com"> <Header> <Field1>111</Field1> <Field2>text</Field2> </Header> <Trailer> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <Field4>Name</Field4> <Field5>EmployeeDetails</Field5> <Field6>Age</Field6> <Field7>Location</Field7> </Trailer> </Code> 上面是请求 XML 负载,其中有一个名为 <Trailer> 的字段 我们再次获得 XML 有效负载。我们只需要获取 从 <Trailer> 字段中的 XML 负载中选择的字段 并生成以下输出。 预期输出有效负载: <?xml version="1.0" encoding="UTF-8"?> <Code xmlns:ns0=http://example.com> <Header> <Field1>111</Field1> <Field2>text</Field2> </Header> <Field5>EmployeeDetails</Field5> <Field6>Age</Field6> <Field7>Location</Field7> </Field5> </Code> 我尝试使用下面的 XSLT,但我不幸从 <Trailer> 字段中获取所需字段 XSLT 代码: <?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <Code> <xsl:copy-of select="//Header" /> <xsl:value-of select="//Trailer" disable-output-escaping="yes"/> </Code> </xsl:template> </xsl:stylesheet> 这是一种方法。 <?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <!-- Identity template. --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="Trailer"> <!-- Do not output the Trailer node or comments. Only output its child nodes. --> <xsl:apply-templates select="*"/> </xsl:template> <!-- Suppress Field4 --> <xsl:template match="Field4"/> </xsl:stylesheet> 问题不完全清楚。可以使用以下方法产生预期结果: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="Trailer"> <xsl:apply-templates select="Field5|Field6|Field7"/> </xsl:template> </xsl:stylesheet>

回答 2 投票 0

带有逗号分隔列表的节点。获取不同的值并创建新节点

我需要创建一个 xml 输出,将所有 wd:External_Value_Data/wd:Text 字段与每个不同的内部值分组。 ...

回答 1 投票 0

如果来自另一个节点的规则适用,则添加位置编号,但按照当前节点的顺序

输入: B缺乏 输入: <ROOT> <TEMPLATE style="test"> <ATTRIBUTE name="Color"><VALUE><UNIT>B</UNIT><UNIT>lack</UNIT></VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="test"> <ATTRIBUTE name="Something"><VALUE>1235</VALUE></ATTRIBUTE> <ATTRIBUTE name="Name"><VALUE><UNIT>Hello</UNIT></VALUE></ATTRIBUTE> <ATTRIBUTE name="Height"><VALUE>12</VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="something-else"> <ATTRIBUTE name="Test"><VALUE>Hey</VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="footnotes"> <ATTRIBUTE name="FOOTNOTE_Test"><VALUE>not-relevant</VALUE></ATTRIBUTE> <ATTRIBUTE name="FOOTNOTE_Name"><VALUE>whatever</VALUE></ATTRIBUTE> <ATTRIBUTE name="FOOTNOTE_Color"><VALUE>Some value</VALUE></ATTRIBUTE> </TEMPLATE> <ROOT> 所需输出: <ROOT> <TEMPLATE style="test"> <ATTRIBUTE name="Color"><VALUE><UNIT>B</UNIT><UNIT>lack</UNIT> *1</VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="test"> <ATTRIBUTE name="Something"><VALUE>1235</VALUE></ATTRIBUTE> <ATTRIBUTE name="Name"><VALUE><UNIT>Hello</UNIT> *2</VALUE></ATTRIBUTE> <ATTRIBUTE name="Height"><VALUE>12</VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="something-else"> <ATTRIBUTE name="Test"><VALUE>Hey</VALUE></ATTRIBUTE> </TEMPLATE> <TEMPLATE style="footnotes"> <ATTRIBUTE name="FOOTNOTE_Test"><VALUE>not-relevant</VALUE></ATTRIBUTE> <ATTRIBUTE name="FOOTNOTE_Name"><VALUE>whatever</VALUE></ATTRIBUTE> <ATTRIBUTE name="FOOTNOTE_Color"><VALUE>Some value</VALUE></ATTRIBUTE> </TEMPLATE> <ROOT> 在我的样式为“test”的模板中,有些属性的名称+前缀“FOOTNOTE_”可以与模板“footnotes”中的属性名称匹配。如果名称匹配,则应将 " * {position}" 添加到属性值中。该位置计算已设置的脚注数量,但顺序基于测试样式属性而不是脚注。 我已经尝试过各种分组尝试和 for-each 循环,但它们从未达到预期的结果。 我正在使用 XSLT 2.0 我可能会分两步完成 - 说这样的话: 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="fn" match="TEMPLATE[@style='footnotes']/ATTRIBUTE" use="substring-after(@name, 'FOOTNOTE_')" /> <xsl:template match="/"> <xsl:variable name="temp"> <xsl:apply-templates mode="temp"/> </xsl:variable> <xsl:apply-templates select="$temp/ROOT"/> </xsl:template> <!-- identity transform --> <xsl:template match="@*|node()" mode="#all"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="#current"/> </xsl:copy> </xsl:template> <xsl:template match="TEMPLATE[@style='test']/ATTRIBUTE[key('fn', @name)]/VALUE" mode="temp"> <xsl:copy> <xsl:apply-templates/> <NUMBER/> </xsl:copy> </xsl:template> <xsl:template match="NUMBER"> <xsl:text> *</xsl:text> <xsl:number count="NUMBER" level="any"/> </xsl:template> </xsl:stylesheet> 请注意,结果是混合内容的 XML,这是您通常想要避免的。 试试这个: <?xml version="1.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="footnote" match="TEMPLATE[@style='footnotes']/ATTRIBUTE" use="substring-after(@name,'FOOTNOTE_')"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="TEMPLATE[@style='test']/ATTRIBUTE/VALUE"> <xsl:variable name="name" select="parent::*/@name"/> <xsl:copy> <xsl:apply-templates select="@* | node()"/> <xsl:variable name="footnode" as="element()?" select="key('footnote',$name)"/> <xsl:if test="$footnode"> <xsl:value-of select="concat(' *',(count(parent::*/preceding-sibling::*) + 1))"/> </xsl:if> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 2 投票 0

嵌套/多级分组xslt

我有下面的xml,我需要首先对请求者进行分组,然后对于每个组,我需要根据项目是否存在进行另一个分组。 蒂姆&...

回答 2 投票 0

XSLT 可同时分组并删除重复项

下面是我的输入 XML。我想根据用户名对 XML 下面进行分组,并删除 HierarchyLocation 中的任何重复项 下面是我的输入 XML ...

回答 2 投票 0

比较数组中的元素值并获取父元素中的最大值元素

我正在尝试在 1.0 中创建一个 XSLT。请在下面找到一个示例 xml。要求是从所有 3 个字段中获取最大的 value1 字段并显示其中的标签。 请求 XML: 我正在尝试在 1.0 中创建一个 XSLT。请在下面找到一个示例 xml。要求是从所有 3 个字段中获取最大的 value1 字段并显示其中的标签。 请求XML: <?xml version="1.0" encoding="UTF-8"?> <GetTestValues xmlns="http://www.test.com/GetTestValues"> <TestSample> <Test> <value1>10000</value1> <value2>2016-01-28</value2> <value3>2017-12-10T01:36:12.403+00:00</value3> <value4>US</value4> <value5>true</value5> </Test> <Test> <value1>30000</value1> <value2>2019-01-28</value2> <value3>2019-01-28T18:04:13.763+00:00</value3> <value4>Canada</value4> <value5>false</value5> </Test> <Test> <value1>50000</value1> <value2>2019-01-28</value2> <value3>2019-01-28T18:04:13.763+00:00</value3> <value4>Canada</value4> <value5>false</value5> </Test> </TestSample> </GetTestValues> 改造后的预期反应: 请求XML: <?xml version="1.0" encoding="UTF-8"?> <GetTestValues xmlns="http://www.test.com/GetTestValues"> <TestSample> <Test> <value1>50000</value1> <value2>2019-01-28</value2> <value3>2019-01-28T18:04:13.763+00:00</value3> <value4>Canada</value4> <value5>false</value5> </Test> </TestSample> </GetTestValues> 我尝试放置 foreach,它显示了所有内容。不确定如何比较才能获得最大的价值。 <xsl:for-each select="/ns0:GetTestValues/ns0:TestSample/ns0:Test"> <ns0:value1> <xsl:value-of select="ns0:value1"/> </ns0:value1> <ns0:value2> <xsl:value-of select="ns0:value2"/> </ns0:value2> <ns0:value3> <xsl:value-of select="ns0:value3"/> </ns0:value3> <ns0:value4> <xsl:value-of select="ns0:value4"/> </ns0:value4> <ns0:value5> <xsl:value-of select="ns0:value5"/> </ns0:value5> </xsl:for-each> 在此样式表中,我遍历Test 元素集,按其value1 子元素的降序排列(以便第一个Test 元素具有最高的value1)。在 for-each 内部,我检查迭代的当前位置,如果它是 1 ,那么我复制当前的 Test 元素;其他Test元素被忽略。 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:test="http://www.test.com/GetTestValues"> <xsl:output method="xml" indent="yes" /> <!-- identity template --> <xsl:template match="@*|node()" name="identity"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <!-- Select only the Test child whose value1 is greatest --> <xsl:template match="test:TestSample"> <xsl:copy> <!-- iterate over the test child elements, in descending order of value1 --> <xsl:for-each select="test:Test"> <xsl:sort select="test:value1" order="descending"/> <!-- copy the test element if it's the first (has the highest value1) --> <xsl:if test="position()=1"> <xsl:copy-of select="."/> </xsl:if> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

比较文件与键/ ID节点,如果差异在兄弟节点中则生成输出

我想比较 XML 节点(Key/ID 节点),他们看看他们的兄弟节点是否有任何不同的值,然后在输出中获取。 合并两个 XML 文件的输入 XML 我想比较 XML 节点(Key/ID 节点),他们看看他们的兄弟节点是否有任何不同的值,然后在输出中获取。 合并两个 XML 文件的输入 XML <?xml version="1.0" encoding="utf-8"?> <aggregatedData> **<wd:Report_Data xmlns:wd="urn:report"> <wd:test> <wd:CID>0011</wd:CID> <wd:name>Test10</wd:name> </wd:test> <wd:test> <wd:CID>20012</wd:CID> <wd:name>Test12</wd:name> </wd:test> <wd:test> <wd:CID>0014</wd:CID> <wd:name>Test14</wd:name> </wd:test> </wd:Report_Data>** * <File xmlns="urn:ExternalSource"> <Root1> <CID>0011</CID> <curre>INR</curre> <name>Test1200</name> </Root1> <Root1> <CID>0000</CID> <curre>cnd</curre> <name>Test00</name> </Root1> <Root1> <CID>20012</CID> <curre>INR</curre> <name>Test12</name> </Root1> <Root1> <CID>0010</CID> <curre>INR</curre> <name>why10</name> </Root1> </File>* </aggregatedData> 现在在上面的输入文件中,如果比较节点只有“0011”和“20012”是常见的,但兄弟只在“0011”中不同。 对于 20012(File/Root1/CID 和 wd:Report_Data/wd:test/wd:CID),两个地方的子节点值相同。它不应该被采摘。 对于 0011(File/Root1/CID 和 wd:Report_Data/wd:test/wd:CID),subling 节点值在两个地方都不同,因此下面是输出。 <?xml version="1.0" encoding="utf-8"?> <FinalFile> <Root1> <CID>0011</CID> <curre>INR</curre> <name>Test1200</name> </Root1> <FinalFile> 尝试使用 XSLT2.0 和 30 使用 xsl:accumulator 但没有运气。 请任何人在这里帮助我。谢谢!

回答 0 投票 0

按元素和值分组 XSLT

我是XSLT的新手,我被一个问题卡住了。我已经做了一些搜索,我读到了关于Muenchian分组,但我不知道如何在这个prorblem中使用它。我试图在XSLT中写代码来读取每 ...

回答 1 投票 0

基于2个XMLs创建XML,并使用XSLT2.0在两个文件中查找值。

我正试图在2个XML的基础上生成一个XML。我正在轮询一个DB,返回人们的详细信息(在查询中可以有n个数量的人返回)。最终的XML应该有准确的数量......

回答 1 投票 0

使用XSLT删除第二个元素的重复节点。

我对xslt没有太多的知识。我试图从我的输入xml中删除一些重复的节点,但节点不完全重复。PremiseId值是重复的,但纬度,经度,...。

回答 1 投票 1

XSLT 1.0 : 需要对具有父ID的元素进行分组。

谁能帮我用XSLT 1.0代码来满足我需要将Parentsscc与其Logisticsscc相关联的要求,我们需要在输入文件中检查相同的Parentsscc & 需要将其与......相关联。

回答 2 投票 0

在XSLT中删除重复的XML节点

如果有人能帮助我创建xslt,根据重复元素的值(PlayBack--ControlInfo--ControlName),从XML中删除重复的节点,我会很感激。我想删除所有...

回答 1 投票 0

xslt中的子群组有多个键

我有一个像下面这样的源xml。我试图使用xslt转换为所需的格式,如下所示。XML样本

回答 1 投票 0

动态分组

我试图通过相邻节点的和来对数据进行分组。例子

回答 1 投票 0

从XML文件中删除重复元素,并且不应删除XSLT文件中的空值

如果有人可以帮助我创建xslt,以便基于重复元素的值(PlayBack--ControlInfo-ControlName1)但不包含空值,从XML中删除重复的节点,我将不胜感激。我想...

回答 1 投票 0

从Xml删除重复元素,并且不应在XSLT中删除空值

[如果有人可以帮助我创建xslt,以基于重复元素的值(PlayBack--ControlInfo-ControlName)而不是空值从XML中删除重复的节点,我将不胜感激。我想...

回答 1 投票 0

从一个XML提取值,同时使用XSLT匹配其他XML的模板

我有2个XML。我正在尝试在第一种XML上运行XSLT,并使用密钥在第二种XML中匹配数据。在第二个XML上进行模板匹配时,我无法从第一个XML的匹配节点提取数据(不知道如何...

回答 1 投票 0

使用XSLT的子组

我有如下所示的源xml。我正在尝试使用xslt转换为所需的格式,如下所示**示例XML ** [table1 ...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.