xslt 相关问题

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

使用 XSLT 在 XML 到 JSON 转换代码中生成数组时出现问题

使用通用 xslt 代码将 XML 转换为 JSON 时,未按预期生成所需的输出。以下是当前输出和所需输出的示例: 电流输出: { “学校&...

回答 1 投票 0

XSLT 将键分隔为多个子节点的查找

对我的业余 XML / XSLT 知识表示歉意 - 仍在学习。我希望我在下面提供了足够的细节。 我最近了解了如何使用 xsl“键”进行查找。我现在正在努力...

回答 1 投票 0

XSLT 匹配另一个 XML 节点中的条目并返回相应的元素

免责声明:我仍在学习 XML / XSLT,如果这很简单,我深表歉意。 我正在尝试查找节点 A 中的一个元素,将其与节点 B 中的相似元素进行匹配,然后从节点 B 返回一个条目到 no...

回答 1 投票 0

svrl:失败断言位置属性规范化元素名称

刚刚使用 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 和本地名称串联。

回答 1 投票 0

Schematron 中使用 schxslt 和 saxonCS 编译的 base-uri 函数

我有一个 xml 文件和 .sch 文件来验证此 xml 文件。但有一些规则叫。 base-uri() 函数返回 nu...

回答 1 投票 0

图像未在 PDF 输出中显示 - XSL:FO

我正在从事TEI Publisher平台历史资源的数字化工作。用户可以下载 xml 格式和 pdf 格式的文本。但对于 pdf

回答 1 投票 0

如何使用 XSLT 来定位和标记大量字符串?

我有一个 XML 文件,正在使用 oXygen 中的 XSLT 3.0 将其转换为 HTML。 假设我的输入文件如下所示: 首先我与约翰·史密斯交谈。 然后我 我有一个 XML 文件,正在使用 oXygen 中的 XSLT 3.0 将其转换为 HTML。 假设我的输入文件如下所示: <root> <p>First I spoke to John Smith.</p> <p>Then I talked with David Jones.</p> </root> 此外,我有一个术语列表,我想在转换过程中自动标记它们。它们位于单独的 XML 文件中,如下所示: <terms> <term>spoke</term> <term>talked</term> </terms> 我希望我的输出 HTML 看起来像这样: <body> <p>First I <span class="term">spoke</span> to John Smith.</p> <p>Then I <span class="term">talked</span> with David Jones.</p> </body> 当然,这可以通过正则表达式搜索和替换来完成,但我正在将数百个术语的列表与一本书长的文本进行整理,因此一次只执行一个是不可能的。我认为在我的 XSLT 中必须有一种自动化的方法来执行此操作。 在我看来,它可能起作用的一种方式是使用类似这样的东西,除了不是单个正则表达式搜索,我需要让它循环遍历其他 XML 文件中的元素的所有: <xsl:analyze-string> 或者是否有某种方法可以从术语列表中的 xsl:for-each 开始,并将其输入到 Replace() 函数中。但我不确定如何构建它,因此它会影响 XML 书籍的文本输出。 任何方向将不胜感激。抱歉我的无知;我还在学习中。 听起来你想要<xsl:template match="text()"> <xsl:analyze-string select="." regex="findmywords"> <xsl:matching-substring> <span class="term"> <xsl:value-of select="."/> </span> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> 。如果任何术语可能具有会影响正则表达式匹配的特殊字符,请使用 funtx 库中的 regex="{string-join(doc('terms,xml')//term, '|')}"。

回答 1 投票 0

如果子元素为空或不存在,则删除 xml 元素

如果子元素 fiel1 和 field2 都不存在或为空,我需要删除 xml 元素。 输入和预期结果(见评论) <...

回答 1 投票 0

按特定字段对 xml 段进行排序(如果存在)

我需要 xls 版本 1 来对文档中包含值的某些片段进行升序排序。

回答 0 投票 0

log4j2.xml 中的 xml 条件代码

我正在尝试在 log4j2.xml 文件中创建条件语句,但它似乎不接受任何条件格式。我尝试过各种选项,例如 xslt 等,但似乎没有......

回答 4 投票 0

将 XML 声明更改为单引号

我有以下传入的 xml 格式,对于此输入 XML,我只需要添加肥皂信封。 输入XML 我有以下传入的 xml 格式,对于此输入 XML,我只需要添加肥皂信封。 输入xml <?xml version="1.0" encoding="UTF-8"?> <p:msg xmlns:p="http://.xml.invoice.com"> <access> <NAME>ABC</NAME> </access> <requestBody> <content>test message</content> </requestBody> </p:msg> 使用下面的简单 xslt 代码,我可以添加肥皂信封,但此声明 需要使用单引号 XSLT 代码 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <!-- Template to match the root of the XML document --> <xsl:template match="/"> <!-- Start of SOAP Envelope --> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://.xml.invoice.com"> <soapenv:Header/> <!-- SOAP Body --> <soapenv:Body> <!-- Copy the original XML payload into the Body --> <xsl:copy-of select="/*"/> </soapenv:Body> </soapenv:Envelope> </xsl:template> </xsl:stylesheet> 如果有什么方法可以将 xml 声明从单引号更改为双引号,请帮助我吗? 预期输出(xml 版本和编码应使用单引号。) <?xml version='1.0' encoding='UTF-8'?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://.xml.invoice.com"> <soapenv:Header/> <soapenv:Body> <p:msg> <access> <NAME>ABC</NAME> </access> <requestBody> <content>test message</content> </requestBody> </p:msg> </soapenv:Body> </soapenv:Envelope> 这不是必需的,但如果你必须拥有它,你可以使用这样的黑客: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:text disable-output-escaping="yes">&lt;?xml version='1.0' encoding='UTF-8'?> </xsl:text> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://.xml.invoice.com"> <soapenv:Header/> <soapenv:Body> <xsl:copy-of select="*"/> </soapenv:Body> </soapenv:Envelope> </xsl:template> </xsl:stylesheet> 这是假设您的处理器支持disable-output-escaping。

回答 1 投票 0

如何使用MSBuild和XSLT实现条件XAML编译?

在这个问题之后,我想根据预处理器指令在构建时有条件地包含/排除 XAML 元素,类似于 #if/#else 在 C# 中的工作方式。我尝试过使用 XSLT 来转换...

回答 1 投票 0

如何使用 XSLT 在构建时有条件地转换 XAML 以镜像 C# 预处理器指令?

我在开发时广泛使用 C# 预处理器指令。我直接在 .cs 文件中定义它们,或者在 .csproj 中全局定义它们: fix_issue_001;

回答 1 投票 0

xslt 转换以删除重复对象

我正在将java对象序列化为XML,稍后需要通过xslt转换该xml。 在这个特定的转换中,我需要删除一个名为 fieldToDelete 的节点(= Java 字段),它可以包含一个

回答 2 投票 0

如何删除 OIC SOAP 响应映射器 XSLT 中的命名空间?

我们正在 Oracle Integration Cloud (OIC) 中进行集成,该集成可返回 SOAP 响应。然而,OIC 会自动将命名空间添加到 SOAP 响应元素,这会导致解析...

回答 1 投票 0

存在哪些 XSLT 2.0 工具? [已关闭]

我正在尝试了解 XML 和 XSLT 的内容,在我的研究中我偶然发现了不同的 XSLT 处理器。 Xalan 是第一个,它似乎工作得很好而且是免费的,除了......

回答 5 投票 0

XSLT:将模板应用于某些标签,复制其余部分

我有一些 XML,如下所示: 一些文本,包括 HTML 标记 还有一些...

回答 1 投票 0

XSL、WordML:判断表格当前单元格是否在第一行第一列

我有一个工作 .xsl,但我想添加一个检查以查看当前单元格是否位于第一行和第一个单元格中: 我有一个工作 .xsl,但我想添加一个检查以查看当前单元格是否位于第一行和第一个单元格中: <xsl:for-each select="w:tr"> <xsl:for-each select="w:tc[position()!=last()]"> <!-- Check if first row and if is first column --> <xsl:if test="w:tr[position()=first()] and w:tc[position()=first()]"> <xsl:text>\mcx</xsl:text> </xsl:if> <!-- Check if is first row only --> <xsl:if test="w:tr[position()=first()] and w:tc[position()!=first()]"> <xsl:text>\mc</xsl:text> </xsl:if> </xsl:for-each> </xsl:for-each> 我无法应用添加了这些行的 .xsl。如果我把它们拿出来,它就会起作用,所以我知道我的支票不正确。有人可以帮我解决 wordML 方面的问题吗?当我接近这个错误时? 谢谢, 拉斯 我纯粹猜测你想做类似的事情: <xsl:for-each select="w:tr"> <xsl:variable name="is1stRow" select="position()=1" /> <xsl:for-each select="w:tc"> <xsl:choose> <xsl:when test="$is1stRow and position()=1"> <!-- this is the first cell in the first row --> <xsl:text>\mcx</xsl:text> </xsl:when> <xsl:when test="$is1stRow"> <!-- this is another cell in the first row --> <xsl:text>\mc</xsl:text> </xsl:when> <xsl:otherwise> <!-- this is a cell in another row --> <!-- do something here? --> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:for-each>

回答 1 投票 0

xslt有split()函数吗?

如何根据某些分隔符拆分字符串? 给定一个字符串 Topic1,Topic2,Topic3,我想根据 , 拆分字符串以生成: 主题1 主题2 主题3

回答 7 投票 0

非嵌套记录集的嵌套 for 循环

我的输入xml如下 1 FFC1 我的输入xml如下 <ns0:ProjectSync xmlns:ns0="http://XSLMapTesting.ProjectSync"> <Funder> <OID>1</OID> <FFC>FFC1</FFC> </Funder> <Funder> <OID>2</OID> <FFC></FFC> </Funder> <Funder> <OID>3</OID> <FFC>FFC3</FFC> </Funder> <Funder> <OID>4</OID> <FFC></FFC> </Funder> <ActiveBudget> <BudgetLines> <Fund> <ID>1</ID> </Fund> </BudgetLines> <BudgetLines> <Fund> <ID>4</ID> </Fund> </BudgetLines> </ActiveBudget> </ns0:ProjectSync> 我的映射xslt代码如下 <xsl:template match="/"> <xsl:apply-templates select="/s0:ProjectSync" /> </xsl:template> <!-- //////////////////////////////////////// ProjectSync template //////////////////////////////////////// --> <xsl:template match="/s0:ProjectSync"> <ns0:Projects> <Project> <Funders> <xsl:apply-templates select="Funder[*]" /> </Funders> <Budgets> <xsl:apply-templates select="ActiveBudget/BudgetLines[*]" /> </Budgets> </Project> </ns0:Projects> </xsl:template> <!-- //////////////////////////////////////// Funders template //////////////////////////////////////// --> <xsl:template match="Funder"> <Funder> <ID> <xsl:choose> <xsl:when test="FFC != ''"> <xsl:value-of select="FFC/text()"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="OID/text()" /> </xsl:otherwise> </xsl:choose> </ID> </Funder> </xsl:template> <!-- //////////////////////////////////////// BudgetLines template //////////////////////////////////////// --> <xsl:template match="ActiveBudget/BudgetLines"> <BudgetLine> <FundID> <xsl:value-of select="Fund/ID/text()" /> </FundID> </BudgetLine> </xsl:template> </xsl:stylesheet> 在上面的“BudgetLines 模板”中,我想应用一个逻辑,例如对于每个预算线,它都会迭代资助者记录集,并查看是否找到具有相同 ID 的资助者并且还填充了 FFC,然后应该映射 FFC。否则,基金/ID 应映射到输出 xml 中。下面的代码也定义了同样的逻辑: for-each select="BudgetLine" for-each select="Funder" choose when test="BudgetLine/Fund/ID = Funder/OID & Funder/FFC != ''" <xsl:value-of select="Funder/FFC/text()" /> break; otherwise <xsl:value-of select="BudgetLine/Fund/ID/text()" /> 上述 xml 的预期输出应如下所示 <ns0:Projects xmlns:ns0="http://XSLMapTesting.Projects"> <Project> <Funders> <Funder> <ID>FFC1</ID> </Funder> <Funder> <ID>2</ID> </Funder> <Funder> <ID>FFC3</ID> </Funder> <Funder> <ID>4</ID> </Funder> </Funders> <Budgets> <BudgetLine> <FundID>FFC1</FundID> </BudgetLine> <BudgetLine> <FundID>4</FundID> </BudgetLine> </Budgets> </Project> </ns0:Projects> 我该如何在 xsl 中实现这一点? 谢谢你 如果我正确理解您的要求,我建议您这样做: 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:strip-space elements="*"/> <xsl:key name="funder" match="Funder" use="OID" /> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="Funder"> <xsl:copy> <ID> <xsl:choose> <xsl:when test="FFC/text()"> <xsl:value-of select="FFC"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="OID"/> </xsl:otherwise> </xsl:choose> </ID> </xsl:copy> </xsl:template> <xsl:template match="ActiveBudget"> <Budgets> <xsl:apply-templates/> </Budgets> </xsl:template> <xsl:template match="BudgetLines"> <xsl:variable name="funder" select="key('funder', Fund/ID)" /> <BudgetLine> <FundID> <xsl:choose> <xsl:when test="$funder/FFC/text()"> <xsl:value-of select="$funder/FFC"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$funder/OID"/> </xsl:otherwise> </xsl:choose> </FundID> </BudgetLine> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

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