xslt 相关问题

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

XSL 顺序排序执行

我正在尝试使用 XSL 根据其内部列表的排序对列表进行排序。 我有以下 XML 我正在尝试使用 XSL 根据其内部列表的排序对列表进行排序。 我有以下 XML <Shirt> <Material Name="Fleece"> <Color Name="Green"> <Details> <!--Omitted--> </Details> </Color> <Color Name="Blue"> <Details> <!--Omitted--> </Details> </Color> </Material> <Material Name="Cotton"> <Color Name="Red"> <Details> <!--Omitted--> </Details> </Color> <Color Name="Acolor"> <Details> <!--Omitted--> </Details> </Color> </Material> </Shirt> 我有以下 XSL <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" omit-xml-declaration="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-Sort this first--> <xsl:template match="Shirt/Material"> <xsl:copy> <xsl:apply-templates select="Color|@*"> <xsl:sort select="@Name" order="ascending" /> </xsl:apply-templates> </xsl:copy> </xsl:template> <!-Sort this second--> <xsl:template match="Shirt"> <xsl:copy> <xsl:apply-templates select="Material|@*"> <xsl:sort select="Color/@Name" order="ascending" /> </xsl:apply-templates> </xsl:copy> </xsl:template> </xsl:transform> 我获得以下输出 <Shirt> <Material Name="Fleece"> <Color Name="Blue"> <Details> <!--Omitted--> </Details> </Color> <Color Name="Green"> <Details> <!--Omitted--> </Details> </Color> </Material> <Material Name="Cotton"> <Color Name="Acolor"> <Details> <!--Omitted--> </Details> </Color> <Color Name="Red"> <Details> <!--Omitted--> </Details> </Color> </Material> </Shirt> 我的目标是让材质“Cotton”成为列表中的第一个,因为按字母顺序排序时它的颜色为“AColor”。据我了解,转换会以不明确的顺序投影到输出树。但是,是否可以在 XSL 中“顺序”执行排序转换?首先对颜色列表进行排序,然后对材质列表进行排序? 另外,不幸的是我只能使用 XSLT 1.0 首先对颜色列表进行排序,然后根据材质列表进行排序? 试试这个方法: XSLT 1.0 + EXSLT 节点集() 函数 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="Shirt"> <xsl:copy> <!-- pre-sort --> <xsl:variable name="pre-sort"> <xsl:apply-templates select="Material" mode="first-pass"/> </xsl:variable> <!-- output --> <xsl:apply-templates select="exsl:node-set($pre-sort)/Material"> <xsl:sort select="Color[1]/@Name"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="Material" mode="first-pass"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates select="Color"> <xsl:sort select="@Name" /> </xsl:apply-templates> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

从 XSLT 中的时间 :00 中删除秒数

我正在尝试修改代码,以便仅从时间戳(秒)中删除最后一个 :00,而不是时间为例如 15:00:00 时的分钟 我目前有 我正在尝试修改代码,以便仅从时间戳(秒)中删除最后一个 :00,而不是在时间为例如 15:00:00 时删除分钟 我目前有 处理以下格式的时间/日期...2024-10-17 15:00:00 我确信使用 Last 或 tokenize 是很简单的事情,但我对此很陌生,并且以其他人的代码为起点。 目前给出的结果只是 15,而不是我需要的 1500。 提前致谢 你的问题不完全清楚。 如果您总是想从 $date-time 变量中删除 seconds 部分,您可以简单地执行以下操作: <xsl:value-of select="substring($date-time, 1, 16)"/> 如果您只想在秒部分为00时执行此操作,您可以这样做: <xsl:value-of select="replace($date-time, ':00$', '')"/>

回答 1 投票 0

如何通过安全性阻止xslt中的权限:hasPermission

在下面的代码中,需要限制所有用户的权限。 即 security:hasPermission 我们需要限制。 ...

回答 1 投票 0

QBO3 如何获取表单上的PersonID?

我正在 QBO3 系统中开发自定义表单,并将调用一些 Javascript 将表单中的数据作为一行保存到付款表中。 当我这样做时,有两个字段需要 Pe...

回答 1 投票 0

调用QBO3附件/生成,但附件/下载失败

使用 QBO3 导入框架,我们使用以下 XML 片段生成邮件合并文档: 导入表格 <

回答 1 投票 0

将负数变为正数 - XSLT

我想知道是否有办法将负值变为正值?这是我的 xslt 文档的片段: ...

回答 3 投票 0

如何使XML声明使用单引号而不是双引号

我正在使用 .xsl 文件将 FileMaker Pro 导出的 XML 文件转换为另一个格式化为 PBCore 2.0 架构的 XML 文件。我的组织需要能够打开输出 XML...

回答 1 投票 0

我想将元素下的CDATA转换为属性值并保留新行

我想使用XSLT将一个XML文件转换为另一个XML文件,并用属性替换某些XML元素的CDATA。 我还需要保留换行符,当然需要转换...

回答 1 投票 0

Saxon 和 XMLFilter:omit-xml-declaration=“yes” 没有效果

我们使用Saxon来生成一些导出文件。 这些转换通常由相继应用的多个 XSLT 转换组成。 为了提高性能,我引入了代码

回答 1 投票 0

任何元素/文本都应与使用 xslt 的 <p> 标签分开<p>

我们希望为按顺序出现在 标签中的任何标签/文本创建单独的 标签,这意味着内容不能不匹配。 谢谢并请帮助我 输入: 我们希望为按顺序出现在 <p> 标签中的任何标签/文本创建单独的 <p> 标签,这意味着内容不能不匹配。 谢谢,请帮助我 输入: <kk><p id="p_aj3uga5iqfuzmmw"> Some text is here <table outputclass="ruled" id="ko4xjv6txx"> <tgroup cols="2" id="67dc15u6ud"> <colspec colname="c1" colnum="1" colwidth="40" id="jc204r3bna"/> <colspec colname="c2" colnum="2" colwidth="60" id="o79df53wog"/> <thead id="kih5dc7um1"> <row id="ve4ln370t8"> <entry id="yi4lwe9p51">head text is here</entry> <entry id="dwl1ol06ju">head text is here</entry> </row> </thead> <tbody id="62gug7qywr" class="- topic/tbody "> <row id="7wdson97xv" class="- topic/row "> <entry id="3at6ja8goj">text is here</entry> <entry id="m33p8e0e9f">text is here</entry> </row> </tbody> </tgroup> </table> <b id="nryvddsy5o"><i id="cs8atnkc9h">Component auditor responsibilities</i></b> some text here </p></kk> 预期输出: <kk><p id="p_aj3uga5iqfuzmmw"> Some text is here</p> <table outputclass="ruled" id="ko4xjv6txx"> <tgroup cols="2" id="67dc15u6ud"> <colspec colname="c1" colnum="1" colwidth="40" id="jc204r3bna"/> <colspec colname="c2" colnum="2" colwidth="60" id="o79df53wog"/> <thead id="kih5dc7um1"> <row id="ve4ln370t8"> <entry id="yi4lwe9p51">head text is here</entry> <entry id="dwl1ol06ju">head text is here</entry> </row> </thead> <tbody id="62gug7qywr" class="- topic/tbody "> <row id="7wdson97xv" class="- topic/row "> <entry id="3at6ja8goj">text is here</entry> <entry id="m33p8e0e9f">text is here</entry> </row> </tbody> </tgroup> </table> <p><b id="nryvddsy5o"><i id="cs8atnkc9h">Component auditor responsibilities</i></b> some text here</p></kk> 我的XSL文件: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" exclude-result-prefixes="xs xd" version="2.0"> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="p"> <xsl:choose> <xsl:when test="starts-with(., text())"> <p><xsl:apply-templates select="text()[1] except table | text() | *"/></p> </xsl:when> <xsl:when test="table[1]"> <xsl:apply-templates select="table[1]"/> </xsl:when> <xsl:when test="*[1]"> <xsl:apply-templates select="*[1]"/> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="table"> <table> <xsl:apply-templates select="@* | node()"/> </table> </xsl:template> </xsl:stylesheet> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" exclude-result-prefixes="xs xd" version="2.0"> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="p[table]"> <!-- If p contains table put everything before and after table in p and the table it self not in p--> <xsl:for-each-group select="node()" group-adjacent="if(self::table) then 1 else 0"> <xsl:choose> <xsl:when test="current-group()[self::table]"> <xsl:apply-templates select="current-group()"/> </xsl:when> <xsl:otherwise> <p> <xsl:apply-templates select="current-group()"/> </p> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

如何使用 XSLT 从 SOAP 响应中过滤 XML 节点

我有一种情况,我需要从 SOAP 响应中过滤某些 XML 节点,我使用了 XSLT 映射,但它没有从 SOAP 响应中过滤特定的 xml 节点,我的要求是有 xml 节点...

回答 1 投票 0

在 HTML 元素中重新定义了 xmlns

我正在使用 HTML Tidy(版本 5.8.0)来清理来自 Web 的 HTML,以便使用 XSLT 进行转换。 这通常工作得很好,直到我发现一个页面有 2 个 元素具有相同的重复

回答 1 投票 0

DownloadContentAsync 返回现有文件的奇怪值

我已将一些 XSLT 文件存储在 azure blob 存储中并使用 BlobClient.DownloadContentAsync() 下载.net功能应用程序中的内容并进行处理。对于其他 xslt 文件,一切都很好,但...

回答 1 投票 0

XSLT:对对象进行排序并保留注释

我正在使用一个工具将游戏数据转换为 XML,但该工具的怪癖之一是它以字母数字方式而不是数字方式输出父代码对象,示例输出带有以下注释: 我正在使用一个工具将游戏数据转换为 XML,但该工具的怪癖之一是它以字母数字方式而不是数字方式输出父代码对象,示例输出带有以下注释: <container format="RTPC" endian="Little"> <object> <object name="root"> <object name="0"><!-- disables input --> <value name="_class" type="string">CInputActionOverride</value> <value name="_class_hash" type="int">-1833934533</value> <value name="_object_id" type="objectid">26D7913A,0</value> <value name="action_list" type="string">Accelerate</value><!-- action name --> <value name="activate_event" type="vec_events">death_run_play_cutscene,0x0</value> </object> <object name="1"> <value name="_class" type="string">CGameObjectList</value> <value name="_class_hash" type="int">-1531974803</value> <value name="_object_id" type="objectid">C51129BC,0</value><!-- spawn list ref --> <value name="name" type="string">SpawnedVehicleList</value> <value name="tags" type="vec_int"/> </object> <object name="10"> <value name="_class" type="string">CNavMeshDynamicObstacle</value> <value name="_class_hash" type="int">838607288</value> <value name="_object_id" type="objectid">F96135EC,0</value> <value name="disable_event" type="vec_events"/> <value name="enable_event" type="vec_events"/> <value name="enabled_from_start" type="int">1</value> </object> <object name="100"> <value name="_class" type="string">SAnimationLayerInfo</value> <value name="_class_hash" type="int">-786417417</value> <value name="_object_id" type="objectid">B2B5BF10,0</value> <value name="file" type="string">animations/characters/light_facelayer.al</value><!-- anim path --> <value name="layer_index" type="int">1</value> <value name="layer_name" type="string">Face</value> <value name="name" type="string">AnimationLayerInfoFace</value> </object> <object name="102"> <value name="_class" type="string">CSpawnReferencePosition</value> <value name="_class_hash" type="int">-1429677905</value> <value name="_object_id" type="objectid">1958DDF6,0</value> <value name="keep_orientation" type="int">1</value> <value name="name" type="string">CSpawnReferencePosition</value> <value name="no_create_on_load" type="int">1</value> <value name="tags" type="vec_int"/> </object> </object> </object> </container> 为了解决这个排序问题,我使用了我发现的这个稍微修改过的 XSL 模板: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="object"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates select="*"> <xsl:sort select="@name" data-type="number" order="ascending"/> </xsl:apply-templates> </xsl:copy> </xsl:template> </xsl:stylesheet> 这个模板可以完成工作,但我面临的另一个问题是转换会吃掉所有评论 [我相信这是默认行为] 并且我的 XSL 知识几乎不存在,这意味着我很难弄清楚列出对代码对象进行排序并保留所有注释所需的代码。 我在示例输入中看到的所有注释都是需要排序的“编号”object元素的子元素。 假设没有任何注释是 object 的子级,其 name 是 root,您可以通过稍微修改模板来解决您的问题,而不是: <xsl:template match="object"> 上面写着: <xsl:template match="object[@name='root']">

回答 1 投票 0

回答 1 投票 0

在 AWS Cloud/Java XML 转换中将非 ASCII 字符转换为问号

我正在 Amazon Web Services 云环境中工作,涉及转换 XML 文档的 java 服务。在某些情况下,当发生这种转换时,非 ASCII 字符会转换为 qu...

回答 1 投票 0

每组嵌套调用中的增量器

在查看了社区的大量精彩建议后,在这里发表了第一篇文章。 我在 XSLT 2.0 中有三个字段,全部处于同一级别(肩膀、膝盖和脚趾)。 我需要输出总和...

回答 3 投票 0

如何将 XsltTransformer 的转换结果写入字符串,然后将其推送到 azure 服务总线?

我需要使用 XsltTransformer 将给定的 xml 转换为 json,XsltTransformer 编译 xslt,然后转换 xml。我希望 XsltTransformer 的目的地是 stri...

回答 1 投票 0

XSLT 错误 FODC0002,尽管路径似乎正确

我正在使用 XSLT 2 (Saxon HE 10.9)。 我有以下目录树: 项目 - 索引.xml - 课程 - 我的A班 -MyClassA.xml 我正在将 MyClassA.xml 转换为新的文件格式。 这里有一个

回答 1 投票 0

xsl:在由外部 xml 文件过滤的节点上应用模板

我不知道用什么词来表达我想要实现的目标,所以我会尽力解释。 请随意将我重定向到现有问题。 假设我有一个包含类列表的 XML 文件(例如...

回答 1 投票 0

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