xslt-2.0 相关问题

将此标记用于特定于XSL Transformations版本2.0的问题,而不是其他版本。

XSLT 将平面 xml 结构转变为分层结构

我需要一个 xslt,它可以采用平面 xml 并将其转换为分层结构。 来源是这样的: 我需要一个 xslt,它可以采用平面 xml 并将其转换为分层结构。 来源是这样的: <?xml version="1.0" encoding="UTF-8"?> <ns0:FlatInfo xmlns:ns0="http://mynamespace.com"> <Header> <OrderNo>100</OrderNo> </Header> <Item> <ItemNo>1</ItemNo> <Product>Slime</Product> <Quantity>2</Quantity> </Item> <Item> <ItemNo>2</ItemNo> <Product>Gunge</Product> <Quantity>4</Quantity> </Item> <Header> <OrderNo>102</OrderNo> </Header> <Item> <ItemNo>1</ItemNo> <Product>Sludge</Product> <Quantity>55</Quantity> </Item> </ns0:FlatInfo> 这需要变成: <?xml version="1.0" encoding="UTF-8"?> <ns0:TreeInfo xmlns:ns0="http://mynamespace.com"> <Header> <OrderNo>100</OrderNo> <Item> <ItemNo>1</ItemNo> <Product>Slime</Product> <Quantity>2</Quantity> </Item> <Item> <ItemNo>2</ItemNo> <Product>Gunge</Product> <Quantity>4</Quantity> </Item> </Header> <Header> <OrderNo>102</OrderNo> <Item> <ItemNo>1</ItemNo> <Product>Sludge</Product> <Quantity>55</Quantity> </Item> </Header> </ns0:TreeInfo> 将项目链接到标头的唯一因素是它们在源 xml 中的输出顺序。 请有人建议实现此目标的最佳方法。 xslt 新手,正在努力使其工作 本质上是 <xsl:template match="*:FlatInfo"> <xsl:for-each-group select="*" group-starting-with="Header"> <Header> <xsl:copy-of select="current-group()/(*/OrderNo, Item)"/> </Header> </xsl:for-each-group> </xsl:template>

回答 1 投票 0

XSLT 过滤模板

我有输入xml: 999.999.868-88 <

回答 1 投票 0

XSLT 3.0 转型

尝试转换 xml 并按 xslt 3.0 中的值和元素对节点进行分组 嘿伙计们,我有一个输入 xml,如下所示 尝试在 xslt 3.0 中转换 xml 并按值和元素对节点进行分组 嘿伙计们,我有一个输入 xml 如下 <?xml version='1.0' encoding='UTF-8'?> <Applications> <Application> <applicationId>280</applicationId> <cust_IDCheckIDCollation> <Option> <id>197249</id> </Option> </cust_IDCheckIDCollation> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>292</applicationId> <cust_IDCheckIDCollation> <Option> <id>197249</id> </Option> </cust_IDCheckIDCollation> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>280</applicationId> <cust_OnlineReferenceCheck> <Option> <id>197249</id> </Option> </cust_OnlineReferenceCheck> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>292</applicationId> <cust_OnlineReferenceCheck> <Option> <id>197249</id> </Option> </cust_OnlineReferenceCheck> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>280</applicationId> <cust_AustralianWorkRights> <Option> <id>197250</id> </Option> </cust_AustralianWorkRights> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>292</applicationId> <cust_AustralianWorkRights> <Option> <id>197250</id> </Option> </cust_AustralianWorkRights> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>280</applicationId> <cust_NationalPoliceCheck> <Option> <id>197249</id> </Option> </cust_NationalPoliceCheck> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> <Application> <applicationId>292</applicationId> <cust_NationalPoliceCheck> <Option> <id>197249</id> </Option> </cust_NationalPoliceCheck> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> </Application> </Applications> 我需要按 applicationId 将其分组,然后按元素名称对其进行子分组以删除重复元素。 预期产出 <Applications> <Application> <applicationId>280</applicationId> <cust_IDCheckIDCollation> <Option> <id>197249</id> </Option> </cust_IDCheckIDCollation> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> <cust_OnlineReferenceCheck> <Option> <id>197249</id> </Option> </cust_OnlineReferenceCheck> <cust_AustralianWorkRights> <Option> <id>197250</id> </Option> </cust_AustralianWorkRights> <cust_NationalPoliceCheck> <Option> <id>197249</id> </Option> </cust_NationalPoliceCheck> </Application> <Application> <applicationId>292</applicationId> <cust_IDCheckIDCollation> <Option> <id>197249</id> </Option> </cust_IDCheckIDCollation> <cust_overallduedilligencestatus> <Option> <id>197276</id> </Option> </cust_overallduedilligencestatus> <cust_OnlineReferenceCheck> <Option> <id>197249</id> </Option> </cust_OnlineReferenceCheck> <cust_AustralianWorkRights> <Option> <id>197250</id> </Option> </cust_AustralianWorkRights> <cust_NationalPoliceCheck> <Option> <id>197249</id> </Option> </cust_NationalPoliceCheck> </Application> <Applications> 在 xslt 3.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:strip-space elements="*"/> <xsl:template match="/Applications"> <xsl:copy> <xsl:for-each-group select="Application" group-by="applicationId"> <xsl:copy> <xsl:for-each-group select="current-group()/*" group-by="name()"> <xsl:element name="{current-grouping-key()}"> <xsl:value-of select="(current-group())[1]"/> </xsl:element> </xsl:for-each-group> </xsl:copy> </xsl:for-each-group> </xsl:copy> </xsl:template> </xsl:stylesheet>``` 我想你想做: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/Applications"> <xsl:copy> <xsl:for-each-group select="Application" group-by="applicationId"> <xsl:copy> <xsl:copy-of select="applicationId"/> <xsl:for-each-group select="current-group()/(* except applicationId)" group-by="name()"> <xsl:copy-of select="current-group()[1]"/> </xsl:for-each-group> </xsl:copy> </xsl:for-each-group> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

如何在XSLT中获取特定父节点的子节点?

我有一个类似这样的输入: ABC 西北

回答 1 投票 0

如何重构此 XML 块?

好吧,交给我的是这个节点块,它是我无法控制的从 Word 到 XML 转换的结果。下一步将是转换为 HTML......

回答 1 投票 0


如何在 XSLT 中设置 <xsl:message> 的调试级别

我正在使用 Apache FOP 生成 AFP 和 PDF。理想情况下,将创建大量 AFP 和 PDF。 我在代码的多个位置使用 xsl:message 。 我只想优先考虑一组...

回答 1 投票 0

XSLT 转换映射

我想使用 XSLT 将以下源转换为目标,但无法这样做。你能帮忙吗? 来源 : { “gp_number”:“56826526”, “行级别”:[ {...

回答 1 投票 0

XSLT 中 except 的逻辑

这个问题只是为了让我可以理解 except 当一个人试图避开某些节点时的逻辑。下面是一个完全无用的例子,但它说明了我的问题。 为什么会这样……

回答 1 投票 0

将具有 rowspan 和 colspan 的 XHTML 表格转换为 LaTeX

我一直在寻找将 HTML 表格转换为 LaTeX 的合适解决方案。我发现以下问题与我的要求相似: XML 表到 LaTeX 将 XHTML 转换为...

回答 1 投票 0

XSLT 用元素替换子字符串,同时保留其他内联元素

我有一个包含文本的 xml 文档和一个包含单词列表的 xml 文档。我想从文本列表中搜索单词并将它们括在新标签中,同时保留其他所有内容不变。简而言之,...

回答 1 投票 0

如何测试xslt中子节点的值

我有一个像这样的XML: ABC 西北 66890 <

回答 1 投票 0

从 xml 中删除命名空间

下面是我试图将其转换为另一个没有命名空间的 xml 的输入 XML。我尝试删除命名空间,但它不起作用。下面提供了请求所需的所有详细信息。

回答 1 投票 0

使用for-each,我可以获取数组项的值吗?

我对 XSL 相当陌生,所以也许我对 for-each 工作原理的概念是不正确的。我的 for-each 正在从提供的 url 中获取 XML 文档中的每个项目。这正在按预期工作。什么...

回答 1 投票 0

在 XSL 中使用 for-each 时如何访问当前项目的值?

使用下面的代码,如何在不指定$array[1]的情况下访问循环中的当前项? https:...

回答 1 投票 0

选择以前的堂兄弟姐妹(包括兄弟姐妹)

我经常遇到想要选择前一个“表兄弟”到节点的问题。 例如 我经常遇到想要选择前一个“表兄弟”到节点的问题。 例如 <root> <level1> <level2 id="1"/> <level2 id="2"/> <level2 id="3"/> <level2 id="4"/> </level1> <level1> <level2 id="5"> <level2 id="9"/> </level2> <level2 id="6"/> <level2 id="7"/> <level2 id="8"/> </level1> </root> 如果上下文节点是 /root/level1/level2[@id='6'] 我不想要“id=9”,我想要“id=5” 如果上下文节点是,则类似 /root/level1/level2[@id='5'] 我想要“id=4” 所以....preceding-sibling 在前一种情况下不起作用,但在后者中不起作用。 前面,选择后一种情况,但不选择前一种情况。 (可能还有很多其他情况) 所以我当前的解决方案是这样的(使用 id=6 作为上下文节点...我可以将它放在一个函数中,但这应该足够清楚) (/root/level1/level2[@id='6']/preceding::level2 intersect /root/level1/level2)[last()] 这确实有效,但似乎..复杂,而且可能效率低下...我是否缺少一个更简单的解决方案? (我目前在 XSLT 3 中使用 XPath 3.1,但我认为这是一个普遍问题) (我已将其限制为 XPath 2.0+,但我可能会将问题开放给 XPath 1.0,因为这看起来更糟糕,因为 intersect 不存在......但我将在另一篇文章中这样做) 对于 XSLT 1.0 这有效 /root/level1/level2[@id='6']/preceding::level2[parent::level1[parent::root]][1] 这无疑是一个更好的解决方案 我想做的是 /root/level1/level2[@id='6']/preceding::(root/level/level2)[1] 并且被解释为路径“root/level/level2”上的匹配 但我认为这无效? 我想不出一个简单的表达方式,我想知道下面使用 path 和 xsl:evaluate 的代码是否实现了要求: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" xmlns:mf="http://example.com/mf" expand-text="yes"> <xsl:function name="mf:cousins" as="node()*"> <xsl:param name="node" as="node()"/> <xsl:variable name="path" select="path($node)"/> <xsl:variable name="path-without-predicates" select="replace($path, '\[[0-9]+\]', '')"/> <xsl:variable name="cousins" as="node()*"> <xsl:evaluate context-item="$node" xpath="$path-without-predicates"/> </xsl:variable> <xsl:sequence select="$cousins except $node"/> </xsl:function> <xsl:function name="mf:preceding-cousins" as="node()*"> <xsl:param name="node" as="node()"/> <xsl:sequence select="mf:cousins($node)[. &lt;&lt; $node]"/> </xsl:function> <xsl:template match="level2[@id = 6] | level2[@id = 5]"> <xsl:comment>preceding cousin: {mf:preceding-cousins(.)[last()]=>serialize(map{ 'method' : 'xml' })}</xsl:comment> <xsl:next-match/> </xsl:template> <xsl:output method="xml" indent="no"/> <xsl:mode on-no-match="shallow-copy"/> </xsl:stylesheet> 使用 path 函数,然后进行字符串替换和 xsl:evaluate 看起来有点像“黑客”,但我没有看到简单、直接的 XPath。

回答 1 投票 0

从格式日期获取年份、周数、周日数,但我的周从星期六开始

这是一种常见的 ISO 问题,我知道这可能是一场噩梦。 Xpath 有一个有用的函数 格式日期 其中有令人难以置信的参数,我将从中计算出来 https://www.w3.or...

回答 1 投票 0

如何在xsl翻译中有多个“替换”特殊字符

如何用斜杠替换字符串上的所有破折号和点?我尝试使用下面的代码。 我也尝试过使用...

回答 2 投票 0

XSLT 使用 xslt 2.0 或更高版本将纯文本文件处理为 XML

我正在与一位使用“Workday”ERP 的客户合作。该 ERP 主要处理 XML、XSLT 和 XSD 脚本,但不处理其他编程语言来将数据传入和传出 ERP。 我有一个...

回答 2 投票 0

XSLT 2.0 错误检查表达式类型

XSLT 2.0 我有一封电子邮件存储在文档数据库中,在下面表示为 travEmail,我正在尝试检查小写 travEmail 是否以小写搜索查询开头,表示为...

回答 1 投票 0

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