XSLT是XML的一种转换语言,旨在将结构化文档转换为其他格式(如XML,HTML和纯文本,或者在XSLT 3,JSON中)。问题应该根据需要使用xslt-1.0,xslt-2.0或xslt-3.0标记之一。
如何在 XSLT 中选择属性值等于 current()/@value -1 的前一个兄弟?
我是 XSLT 的新手,尽管我进行了研究,但我很难找到解释或至少将它们应用到我的案例中,所以我在这里碰碰运气,提前感谢您的关注 我有一个 XML 结构...
您好! 我想通过文档函数从 XSLT 中的不同 Maven POM 中提取一些属性。脚本本身工作正常,但文档函数为 P 返回空结果...
使用 xslt 删除 xml 中的几个节点以及兄弟节点中的匹配文本
尝试使用 xslt 删除 xml 中的几个节点以及兄弟节点中的匹配文本 我的 xml 如下所示 尝试使用 xslt 删除 xml 中的几个节点以及兄弟节点中的匹配文本 我的 xml 如下所示 <?xml version="1.0" encoding="UTF-8"?> <root xmlns:map="http://www.w3.org/2005/xpath-functions/map"> <row> <Keep_Name>Africa</Keep_Name> </row> <row> <Keep_Name>USA</Keep_Name> </row> <row> <Keep_Name>Mexico</Keep_Name> </row> <row> <Keep_Name>Canada</Keep_Name> </row> <row> <Keep_Name>Malaysia</Keep_Name> </row> <row> <Remove_Name>Africa</Remove_Name> </row> <row> <Remove_Name>Mexico</Remove_Name> </row> <row> <Remove_Name>Srilanka</Remove_Name> </row> <row> <Keep_Name>Bangladesh</Keep_Name> </row> </root>` 我需要的输出如下 `<?xml version="1.0" encoding="UTF-8"?> <root > <row> <Keep_Name>USA</Keep_Name> </row> <row> <Keep_Name>Canada</Keep_Name> </row> <row> <Keep_Name>Malaysia</Keep_Name> </row> <row> <Keep_Name>Bangladesh</Keep_Name> </row> </root> ` 尝试了下面的 xslt 但无法正常工作。我希望这些删除Remove_Name节点以及相同值的Keep_Name节点从输出中完全删除 `<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="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="row[.=preceding-sibling::row/.]"/> </xsl:stylesheet>` 在 xslt 上面尝试过这个,但它没有按预期工作。 仅当文本匹配时,请帮我删除输出中的这些 Remove_Name 和 Keep_Name 节点。` 如果我正确理解所需的逻辑,它可以实现为: 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:template match="/root"> <xsl:copy> <xsl:for-each-group select="row" group-by="Keep_Name | Remove_Name"> <xsl:if test="count(current-group())=1"> <xsl:copy-of select=".[Keep_Name]"/> </xsl:if> </xsl:for-each-group> </xsl:copy> </xsl:template> </xsl:stylesheet> 或: XSLT 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:key name="row-by-name" match="row" use="Keep_Name | Remove_Name" /> <xsl:template match="/root"> <xsl:copy> <xsl:copy-of select="row[Keep_Name][count(key('row-by-name', Keep_Name | Remove_Name))=1]"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
尝试使用 xslt 删除与兄弟节点文本中匹配的 Xml 节点 我的 xml 如下所示 尝试使用 xslt 删除兄弟节点文本中匹配的 Xml 节点 我的 xml 如下所示 <?xml version="1.0" encoding="UTF-8"?> <root xmlns:map="http://www.w3.org/2005/xpath-functions/map"> <row> <Name>Africa</Name> </row> <row> <Name>USA</Name> </row> <row> <Name>Mexico</Name> </row> <row> <Name>Canada</Name> </row> <row> <Name>Malaysia</Name> </row> <row> <Name>Africa</Name> </row> <row> <Name>Mexico</Name> </row> <row> <Name>Bangladesh</Name> </row> </root>` 我需要的输出如下 `<?xml version="1.0" encoding="UTF-8"?> <root > <row> <Name>USA</Name> </row> <row> <Name>Canada</Name> </row> <row> <Name>Malaysia</Name> </row> <row> <Name>Bangladesh</Name> </row> </root> ` 在 xslt 下尝试过,但在输出 xml 代码中也看到了非洲和墨西哥。我希望这两个重复的节点以及具有相同值的原始节点从输出中完全删除 `<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="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="row[.=preceding-sibling::row/.]"/> </xsl:stylesheet>` 在 xslt 上尝试过此操作,但在输出中仍然看到非洲和墨西哥节点。 请帮我删除输出中的这些节点。` 这是一种简单的方法: 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:template match="/root"> <xsl:copy> <xsl:for-each-group select="row" group-by="Name"> <xsl:if test="count(current-group())=1"> <xsl:copy-of select="."/> </xsl:if> </xsl:for-each-group> </xsl:copy> </xsl:template> </xsl:stylesheet>
我有一个 XML,我希望在其中根据不同的标准对不同的节点进行排序。 我也希望输出为 XML 格式。 我遇到的问题是当与其中一种匹配的节点集......
为什么Idea和Npp-Plugin无法识别xslt-2.0标签?
我正在尝试在我的计算机上设置 XSLT 2.0 的测试环境。遗憾的是,Intellij Ultimate 和带有 XMLTools 的 Notepad++ 都无法运行此代码片段,而 freeformatter.com 上的在线转换器
我是XSLT新手,所以这个问题可能有点傻。有人可以向我解释一下这是怎么回事吗? 我有一个简单的 XML 文档(仅用于测试目的)及其样式表。 我不
在XSLT中计算时区偏移相当于oracle TZ_OFFSET函数
我需要计算 XSLT 中时区的时间偏移量,这可以完成 Oracle 中 TZ_Offset 函数的功能。 例如,在 Oracle 中 从 DUAL 中选择 TZ_Offset('美国/东部'); --返回'-04:...
我有以下带有 SOAP 信封的输入 XML,需要删除输出 xml 中的肥皂信封。 我有以下带有 SOAP 信封的输入 XML,需要删除输出 xml 中的肥皂信封。 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <Messages xmlns="http://web.ui.com"> <result failed="0" scheduled="0" sent="1"> <Details limit="4" rem="2" type="ys"/> </result> </Messages> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 我使用了下面的 XSLT 代码,但它没有给出预期的输出 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://web.ui.com" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/SOAP-ENV:Envelope"> <xsl:apply-templates select="SOAP-ENV:Body/*"/> </xsl:template> <xsl:template match="SOAP-ENV:Body"> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="@*"> <xsl:copy/> </xsl:template> </xsl:stylesheet> 预期产量 <?xml version="1.0" encoding="UTF-8"?> <Messages xmlns="http://web.ui.com"> <result failed="0" scheduled="0" sent="1"> <Details limit="4" rem="2" type="ys"/> </result> </Messages> 因此,无论消息节点内的字段和节点如何,代码都应该正常工作。 在 XSLT 2.0 中,您可以简单地执行以下操作: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/SOAP-ENV:Envelope"> <xsl:copy-of select="SOAP-ENV:Body/*" copy-namespaces="no"/> </xsl:template> </xsl:stylesheet>
有没有人尝试过在node.js中使用XSLT样式表将xml文件转换为html网页?我的背景是Java。我通常使用 SAXON 将 XML 转换为 HTML 网页。我是 Node.js 的新手。 ...
Schematron 文件中的自定义命名空间“localFunction”导致转换崩溃
我有一个 Schematron 文件 (.sch),其中包含像“localFunctions”这样的命名空间。它用于调用同一文件中的本地函数。但是当我尝试进行验证时,编译 Sche...
无法访问 XSLT 处理器 3.0 中已解析的未转义 XML 的子元素
使用 Saxon-HE 10.9 和 XSLT 3.0,我尝试转换嵌入在较大 XML 文件中的未转义 XML 字符串。我已经通过使用完成了这个 使用 Saxon-HE 10.9 和 XSLT 3.0,我尝试转换嵌入在较大 XML 文件中的未转义 XML 字符串。我通过使用完成了这个 <xsl:template match="INTERNAL_MATCH" mode="dataset"> <xsl:variable name="unescapedXML" select="parse-xml(.)"/> <TESTVAL> <xsl:element name="output-params2"> <xsl:copy-of select="//$unescapedXML" /> </xsl:element> </TESTVAL> </xsl:template> 输出如下: <TESTVAL> <output-params2> <product ism:ownerProducer="USA"> <name>Test Product</name> <shortName>TP</shortName> <base type="testtype" id="1235"/> <base type="testtype2" id="1236"/> </product> </output-params2> </TESTVAL> 但是,我想访问此输出的子节点,而不是能够按类型解析基本元素,if type = 'testtype',然后将其 id 存储为变量。 我该如何实现这个目标?我尝试做访问器 <xsl:copy-of select="//$unescapedXML/product/base" /> 但它什么也没返回。 按类型解析基本元素,如果 type = 'testtype' 则存储它的 id 给出以下输入: XML <INTERNAL_MATCH><product ownerProducer="USA"><name>Test Product</name><shortName>TP</shortName><base type="testtype" id="1235"/><base type="testtype2" id="1236"/></product></INTERNAL_MATCH> 这个样式表: XSLT 3.0 <xsl:stylesheet version="3.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="INTERNAL_MATCH"> <xsl:variable name="unescapedXML" select="parse-xml(.)"/> <TESTVAL> <output-params2> <xsl:value-of select="$unescapedXML/product/base[@type='testtype']/@id" /> </output-params2> </TESTVAL> </xsl:template> </xsl:stylesheet> 将返回: 结果 <?xml version="1.0" encoding="UTF-8"?> <TESTVAL> <output-params2>1235</output-params2> </TESTVAL> 重要: 我已从您的输入示例中删除了未声明的命名空间前缀 ism:。我假设在您的实际情况下,此前缀已正确声明并绑定到名称空间,否则您会收到错误而不是报告的结果。
- 已解决 - 图像未在 PDF 输出中显示 - XSL:FO - 已解决 -
我正在从事TEI Publisher平台历史资源的数字化工作。用户可以下载 xml 格式和 pdf 格式的文本。但对于 pdf
我对 XSLT 1.0 有一个独特的问题。下面是我的输入 XML。 XML: 15024734061$118.2307/15/2024]]> 是 氮 并输出 XML: 根据信用卡或借记卡标签的值为 Y,它应显示金额为 Cr...
使用 XSLT 在 XML 到 JSON 转换代码中生成数组时出现问题
使用通用 xslt 代码将 XML 转换为 JSON 时,未按预期生成所需的输出。以下是当前输出和所需输出的示例: 电流输出: { “学校&...
对我的业余 XML / XSLT 知识表示歉意 - 仍在学习。我希望我在下面提供了足够的细节。 我最近了解了如何使用 xsl“键”进行查找。我现在正在努力...
免责声明:我仍在学习 XML / XSLT,如果这很简单,我深表歉意。 我正在尝试查找节点 A 中的一个元素,将其与节点 B 中的相似元素进行匹配,然后从节点 B 返回一个条目到 no...
刚刚使用 schxslt 使用 SaxonCS 编译的 xsl 文件对我的 xml 文件进行了验证。在 svrl 报告的输出中,失败的位置如下所示。 刚刚使用 schxslt 使用 SaxonCS 编译的 xsl 文件对我的 xml 文件进行了验证。在 svrl 报告的输出中,失败的位置如下所示。 <svrl:failed-assert location="/Q{http://www.edefter.gov.tr}defter[1]/Q{http://www.xbrl.org/2003/instance}xbrl[1]/Q{http://www.xbrl.org/int/gl/cor/2006-10-25}accountingEntries[1]/Q{http://www.xbrl.org/int/gl/cor/2006-10-25}entryHeader[298]" test="some-test"> <svrl:text>some-message</svrl:text> </svrl:failed-assert> 有没有可能的方法来检索带有命名空间的 xml 元素 <svrl:failed-assert location="/edefter:defter[1]/xbrli:xbrl[1]/gl-cor:accountingEntries[1]/gl-cor:entryHeader[298]" test="some-test"> <svrl:text>some-message</svrl:text> </svrl:failed-assert> 像这样。 我试图找到一种提供名称空间或导入模式的方法,但找不到方法。 编辑: 这是编译前svrl文件的命名空间 <xsl:transform version="2.0" xmlns="http://www.w3.org/1999/XSL/TransformAlias" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:error="https://doi.org/10.5281/zenodo.1495494#error" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" xmlns:schxslt-api="https://doi.org/10.5281/zenodo.1495494#api" xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 这是编译后的 svrl 报告的命名空间 <svrl:schematron-output xmlns:defterek="http://www.edefter.gov.tr/ek" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:edefter="http://www.edefter.gov.tr" xmlns:error="https://doi.org/10.5281/zenodo.1495494#error" xmlns:gl-bus="http://www.xbrl.org/int/gl/bus/2006-10-25" xmlns:gl-cor="http://www.xbrl.org/int/gl/cor/2006-10-25" xmlns:gl-muc="http://www.xbrl.org/int/gl/muc/2006-10-25" xmlns:gl-plt="http://www.xbrl.org/int/gl/plt/2010-04-16" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" xmlns:schxslt-api="https://doi.org/10.5281/zenodo.1495494#api" xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" title="Yevmiye defteri dokumanlarını kontrol etmek için gerekli olan schematron kuralları"> <svrl:ns-prefix-in-attribute-values prefix="gl-plt" uri="http://www.xbrl.org/int/gl/plt/2010-04-16"/> <svrl:ns-prefix-in-attribute-values prefix="gl-cor" uri="http://www.xbrl.org/int/gl/cor/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="gl-bus" uri="http://www.xbrl.org/int/gl/bus/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="gl-muc" uri="http://www.xbrl.org/int/gl/muc/2006-10-25"/> <svrl:ns-prefix-in-attribute-values prefix="xbrli" uri="http://www.xbrl.org/2003/instance"/> <svrl:ns-prefix-in-attribute-values prefix="ds" uri="http://www.w3.org/2000/09/xmldsig#"/> <svrl:ns-prefix-in-attribute-values prefix="xades" uri="http://uri.etsi.org/01903/v1.3.2#"/> <svrl:ns-prefix-in-attribute-values prefix="edefter" uri="http://www.edefter.gov.tr"/> <svrl:ns-prefix-in-attribute-values prefix="defterek" uri="http://www.edefter.gov.tr/ek"/> 在您的 Schematron 中,您可以提供自己的 schxslt:location 函数,例如 <schema xmlns="http://purl.oclc.org/dsdl/schematron" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:schxslt="https://doi.org/10.5281/zenodo.1495494" queryBinding="xslt3"> <xsl:function name="schxslt:location" as="xs:string"> <xsl:param name="node" as="node()"/> <xsl:sequence select="string-join($node/ancestor-or-self::*!node-name(), '/')"/> </xsl:function> 该示例只是向您展示如何设置自己的函数,函数体不是您想要生成的带有位置谓词的路径的实现,而只是生成带有节点名称的路径。但是您可以根据您的需求调整该函数,但尝试模仿 path 函数结果的原始 Schxslt 实现位于 https://github.com/schxslt/schxslt/blob/main/core/src/main/资源/xslt/2.0/compile/compile-2.0.xsl#L185。在该代码中,您似乎只想输出元素节点的 Q{ 加上位置谓词,而不是 node-name() 命名空间-uri 和本地名称串联。
Schematron 中使用 schxslt 和 saxonCS 编译的 base-uri 函数
我有一个 xml 文件和 .sch 文件来验证此 xml 文件。但有一些规则叫。 base-uri() 函数返回 nu...
我正在从事TEI Publisher平台历史资源的数字化工作。用户可以下载 xml 格式和 pdf 格式的文本。但对于 pdf