xslt 相关问题

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

如何过滤源 XML,然后将结果再次作为 XML 传递以正常处理

我有一个 xslt 和 xml 处理工作流程,其中文档从根匹配开始处理,然后触发各种其他处理元素。我现在需要采用相同的工作流程并注入...

回答 1 投票 0

xml 分页转置事务排序数据在 xslt2 中显示为 html 表

得到相同的旧(无序)xml数据文件(这次有7条“记录”)... 180 <

回答 1 投票 0

查找彼此相邻的兄弟节点

我有一个巨大的 xml 和 xsl,在转换它时遇到一些错误。我想知道如果两个子节点在父节点内彼此相邻,则调用适当的 templ...

回答 1 投票 0

xslt:键与 contains(text(),

我必须使用 xslt 1.0 并且我有以下 xml: 短 客户端、运行时、语言 <

回答 1 投票 0

如何使用 XSLT 合并两个相似的 XML 文件?

我有两个结构相似的 XML 文件。需要使用 XSLT 将这些 xml 文件合并为一个。 01.xml(有两个引用REF01和REF10) 我有两个结构相似的 XML 文件。需要使用 XSLT 将这些 xml 文件合并为一个。 01.xml(有两个引用 REF01 和 REF10) <?xml version="1.0" encoding="utf-8" standalone="yes"?> <common-indicators> <common-indicator> <reference>REF01</reference> <name>name1</name> <reports> <report> <id>15</id> <name>name15</name> </report> <report> <id>16</id> <name>name16</name> </report> </reports> </common-indicator> <common-indicator> <reference>REF10</reference> <name>name10</name> <reports> <report> <id>30</id> <name>name30</name> </report> <report> <id>32</id> <name>name32</name> </report> <report> <id>34</id> <name>name34</name> </report> </reports> </common-indicator> </common-indicators> XSLT 转换(包括 xml 文件作为 param1 与两个引用 REF02 和 REF10 合并): <xsl:param name="param1"> <common-indicators> <common-indicator> <reference>REF02</reference> <name>name2</name> <reports> <report> <id>17</id> <name>name17</name> </report> <report> <id>18</id> <name>name18</name> </report> </reports> </common-indicator> <common-indicator> <reference>REF10</reference> <name>name10</name> <reports> <report> <id>36</id> <name>name36</name> </report> <report> <id>38</id> <name>name38</name> </report> <report> <id>40</id> <name>name40</name> </report> </reports> </common-indicator> </common-indicators> </xsl:param> <xsl:variable name="updateItems" select="$param1/common-indicators/common-indicator" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="common-indicators"> <xsl:copy> <xsl:apply-templates select="common-indicator" /> <xsl:apply-templates select="$updateItems" /> </xsl:copy> </xsl:template> XSLT 3.0 引入了合并功能。 这是一个为您提供的概念示例。 List1.xml <?xml version="1.0"?> <list> <item id="1"> <descr ref="a"/> <descr ref="b"/> </item> <item id="2"> <descr ref="c"/> <descr ref="d"/> </item> <item id="3"> <descr ref="e">one</descr> <descr ref="f">one</descr> </item> </list> List2.xml <?xml version="1.0"?> <list> <item id="4"> <descr ref="z"/> <descr ref="y"/> </item> </list> XSLT 3.0 <?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:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math" version="3.0"> <xsl:output method="xml" indent="yes" encoding="UTF-8"/> <xsl:strip-space elements="*"/> <!--fully qualified path's spaces shall be encoded via encode-for-uri()--> <!--directory and file names are case sensitive--> <xsl:param name="directory" select="'c:/XSLT30/Merging two XML files_XSLT30'"/> <xsl:param name="wildcard" select="'List*.xml'"/> <!--<xsl:mode streamable="yes"/>--> <xsl:mode on-no-match="shallow-copy"/> <xsl:template match="/"> <list> <xsl:merge> <xsl:merge-source for-each-item="collection('file:///' || encode-for-uri($directory) || '?strip-space=yes;select=' || $wildcard)" select="list/item"> <xsl:merge-key select="@id" order="ascending"/> </xsl:merge-source> <xsl:merge-action> <xsl:sequence select="current-merge-group()"/> </xsl:merge-action> </xsl:merge> </list> </xsl:template> </xsl:stylesheet> 输出 <?xml version="1.0" encoding="UTF-8"?> <list> <item id="1"> <descr ref="a"/> <descr ref="b"/> </item> <item id="2"> <descr ref="c"/> <descr ref="d"/> </item> <item id="3"> <descr ref="e">one</descr> <descr ref="f">one</descr> </item> <item id="4"> <descr ref="z"/> <descr ref="y"/> </item> </list>

回答 1 投票 0

我如何将未解析的文本函数包装在一个条件中,以便它不会一直被调用?

跟进问题如何将动态文件名传递给 xslt 中的未解析文本函数? 我有以下代码片段: 跟进问题如何将动态文件名传递给 xslt 中的未解析文本函数? 我有以下代码片段: <xsl:variable name="PDFNAME" select="InvoiceIndicators/PdfFileName"/> <xsl:variable name="vText" select="tokenize(unparsed-text('../data/ebpp/fopinvoices/arn/emfe_afp/sample.txt'),'&#xD;&#xA;')"/> <xsl:message>value of unparsed-text is <xsl:value-of select="$vText"/> </xsl:message> <xsl:variable name="PDFFileStatus"> <xsl:for-each select="$vText"> <xsl:if test="contains(.,$PDFNAME)"> <xsl:value-of select="substring-after(.,',')"/> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:message><xsl:text>PDFFileStatus :</xsl:text> <xsl:value-of select="$PDFFileStatus"/> 我在代码的其他部分使用变量 PDFFileStatus 并对其进行检查。 例如在我的代码的某些部分, <xsl:when test="DunningSummary and $PDFFileStatus='Found'"> <xsl:value-of select="generate-id(DunningSummary)"/> </xsl:when> 到目前为止,代码运行得很好。但在某些情况下,我不想输入我编写未解析文本函数的代码。 就像用 if 条件包装它一样: <xsl:if test="InvoiceIndicators/LetterTypeCode = 'PU'"> <xsl:variable name="imagename" select="substring(substring-after(InvoiceDetails/InvoiceNumber, '_'), 3, 9)"/> <xsl:variable name="vText" select="tokenize(unparsed-text(concat('../data/ebpp/fopinvoices/arn/emfe_afp/', $FileName, '.txt')),'&#xD;&#xA;')"/> <xsl:message>value of unparsed-text is <xsl:value-of select="$vText"/> </xsl:message> <xsl:variable name="PDFFileStatus"> <xsl:for-each select="$vText"> <xsl:if test="contains(.,$imagename)"> <xsl:value-of select="substring-after(.,',')"/> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:message><xsl:text>PDFFileStatus :</xsl:text> <xsl:value-of select="$PDFFileStatus"/> </xsl:message> </xsl:if> 但现在我遇到了代码片段的问题,我在其中添加了对变量 PDFFileStatus 的检查。 遇到这种情况我该如何处理? 根据您想要使用该函数的评论 unparsed-text-available https://www.w3.org/TR/xpath-functions-31/#func-unparsed-text-available 然后仅在以下情况下使用 unparsed-text未解析文本可用检查返回 true。

回答 1 投票 0

XslLoadException:禁止解析外部 URI

我有 xslt 工作表,其中包含另一个 xslt 文件的标签,所有文件编译正确并且没有错误,但是当运行以下代码时我遇到异常 var myXslTrans = 新 XslCompiledTransf...

回答 2 投票 0

python saxonche - 为什么executable.transform_to_value 返回 None?

刚刚找到了Python的saxonche库。这太棒了。在玩的过程中我遇到了以下问题: 当尝试使用executable.transform_to_value返回PyXdmNode时,下面的代码...

回答 1 投票 0

连接xpath中的多个节点值

我有一个如下所示的 XML 你好 世界 我有一个如下所示的 XML <element1> <element2> <element3> <element4>Hello</element4> <element5>World</element5> </element3> <element3> <element4>Hello2</element4> <element5>World2</element5> </element3> <element3> <element4>Hello3</element4> <element5>World3</element5> </element3> </element2> </element1> 我正在尝试使用 Xpath 来获得这样的结果: Hello.World Hello2.World2 Hello3.World3 我使用了下面的 concat 函数,但没有得到正确的结果。 连接功能: concat(/element1/element2/element3/element4/text(),".", /element1/element2/element3/element5/text()) 我得到的结果: Hello.World 怎样才能得到正确的结果? 我正在使用 XPath 和 Camel Spring DSL。 编辑: XQuery、XSLT 和 SPel 中的解决方案也受到赞赏。 编辑 我尝试了字符串连接,但没有成功: 字符串连接函数: string-join((/element1/element2/element3/element4/text(), /element1/element2/element3/element5/text()),".") 我得到的结果: Hello.Hello2.Hello3.World.World2.World3 试试这个表达方式... string-join(//element3/(concat(element4/text(), '.', element5/text())), "&#10;") 我使用了 concat 方法,效果很好。 concat(//SomeElement/text(),'_',//OtherElement/text()) 这里有一个解决方案XSLT: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="//element3"> <xsl:value-of select="element4/text()" />.<xsl:value-of select="element5/text()" /> </xsl:template> </xsl:stylesheet> 使用XQuery: for $d in $doc/element2/element3 return fn:string-join(fn:data($d/element()), "."). $doc 存储 Xml。 如果您需要加入 xpath 选择的文本节点但无法使用 string-join(当您坚持使用 XSL 1.0 时),这可能会有所帮助: <xsl:variable name="x"> <xsl:apply-templates select="..." mode="string-join-mode"/> </xsl:variable> joined and normalized: <xsl:value-of select="normalize-space($x)"/> <xsl:template match="*" mode="string-join-mode"> <xsl:apply-templates mode="string-join-mode"/> </xsl:template> <xsl:template match="text()" mode="string-join-mode"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="element3"> <xsl:value-of select="element4,element5" separator="."/> </xsl:template>

回答 6 投票 0

如何在XPath-1.0中进行集合运算?

我在 SO 和其他地方看到以下内容应该有效(这个示例直接来自 O'Reilly 的 XSLT Cookbook): (:交叉点:) $set1[计数(. | $set2) = 计数($set2)] (:

回答 2 投票 0

xsl:元素不想接受来自属性值的字符串

我正在尝试将元素属性值转换为标签(名称)。例如,一个 到一个 。神秘的是,这根本不可能发生,我明白......

回答 1 投票 0

计算至少一个子节点具有该属性的节点

我一直在为此兜圈子。我想统计至少有一项属性发生变化的工人数量。如果名字改变,那就是 1。如果姓氏改变,那...

回答 3 投票 0

Xpath。使用 fn:collection() 和 fn:base-uri() 获取 JSON 文件的 URI

我有一个包含多个 json 文件 (.json) 的文件夹。任务是获取文件夹中每个 json 文件的 uri。我在 xslt 文件中使用 fn:collection 和 fn:base-uri 。但是当我退出时我收到错误...

回答 1 投票 0

子元素未从 XSL 文件填充

当我向父标记添加静态值时,grandChild 标记未填充模板匹配 我尝试过 template-match 和 for-each 遇到问题 输入: <

回答 1 投票 0

在 XSL 的另一部分使用输出转义元素

我不知道如何保存包含 XML 表的输出转义元素并对该 XML 表进行转换。我似乎无法访问转义元素的节点。 这是XM...

回答 1 投票 0

列表项标签 XML:FO 垂直对齐

我正在尝试将项目符号与正文垂直对齐。所以该项目符号应该位于中间(垂直)。但我无法实现它。 我正在尝试将项目符号与正文垂直对齐。所以该项目符号应该位于中间(垂直)。但我无法实现它。 <fo:list-item> <fo:list-item-label end-indent="label-end()"> <fo:block> <xsl:call-template name="gbl-bullet-tick-circle"/> </fo:block> </fo:list-item-label> <fo:list-item-body start-indent="body-start()"> <fo:block font-size="10pt"> here is hell lot of text paragraph i want to print... here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print... </fo:block> </fo:list-item-body> </fo:list-item> 它正在打印如下所示的内容 . here is hell lot of text paragraph i want to print... here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print... 但实际上我希望它打印如下 here is hell lot of text paragraph i want to print... . here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print...here is hell lot of text paragraph i want to print... 有人以前在 XML:FO 中做过这件事吗,请分享一些相关信息。 提前非常感谢您。 问候, 莫娜 快速答案是使用包含两列的表格。对项目符号使用显示对齐。我可以测试列表的一些东西,但我想带有项目符号的块的进展维度可能不受列表主体控制,我不确定。 我测试过,现在我确定了。如果在列表项标签上放置边框,您会发现块边界仅与列表项标签所需的大小相同。 要完成此布局,请使用两列表格,其中第一个单元格具有“display-align=”center”和项目符号,第二个单元格包含内容。

回答 1 投票 0

如何将 xpath 存储在变量中并在另一个 xpath 中使用该变量

将xpath存储在变量中,并在其他xpath语句中调用该变量 示例.xml //ZC_area/块/Next_block/变体 将xpath存储在变量中,并在其他xpath语句中调用该变量 示例.xml <Variable Name="LC_F_DPN"> <Path>//ZC_area/Block/Next_block/Variant</Path> <Variable_type>DPN</Variable_type> <Class_name>Point</Class_name> </Variable> myxslcode.xsl <xsl:variable name="MyPath" select="//Variable/Path"/> <xsl:value-of select="$MyPath[Index_on_line_section =current()/@VARIANT_RANK and Line_section_id =current()/$LC_ID]/../../Id"/> </xsl:if>``` here, MyPath I couldnt able to access. I want to use the MyPath variable and fetch the values, Can someone please help me with this 我喜欢将 Powershell 脚本与 Xml Linq 一起使用 using assembly System.Xml.Linq $filename = 'c:\temp\test.xml' $doc = [System.Xml.Linq.XDocument]::Load($filename) $variables = $doc.Descendants('Variable') $lc_f_dpn = @([System.Linq.Enumerable]::Where($variables, [Func[object,boolean]]{ param($x) $x[0].Attribute('Name').Value -eq 'LC_F_DPN'})) $path = $lc_f_dpn[0].Element('Path').value $path

回答 1 投票 0

XML 未按 XSLT 中的预期形成

我正在使用以下 XSLT 来形成 XML,并且代码工作正常,但我希望将此代码包装在一个条件下。 在下面的 XML 中,因为 S_HL/D_735='T' 只出现一次,这就是我

回答 1 投票 0

JSON 到 JSON 转换器

我有一个场景。 所需的输入和输出均为 JSON。 // 输入 { “旧对象”:{ 《时间》:1351160457922, “名称”:“O名称”, “数量”:100, “价格”:10 } } // 输出 { “新对象...

回答 9 投票 0

BizTalk 2020 - 将 XML 转换为数组 JSON 有效负载

我正在尝试将以下有效负载 (JSON) 发送到 REST 端点,但是当我在 BizTalk 中使用传统映射来构建 XML 架构,然后在自定义管道中使用 JSON 编码器来发送它时...

回答 1 投票 0

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