【问题标题】:xsl - recursive match on xml using partial stringxsl - 使用部分字符串对 xml 进行递归匹配
【发布时间】:2013-08-03 11:05:14
【问题描述】:

我有一个 xml,它在无数节点上使用非常复杂的 id 名称矩阵。 例如: 060a2b34.01010101.01010f00.13000000.060e2b34.7f7f2a80.519b69a4.8e8600fc

不幸的是,我必须在我的 xsl 中使用部分名称匹配来有效地实现匹配。

在我开始创建一个包含完整示例 xsl 代码和输入以及预期 XML 示例的问题之前,我希望有人可以帮助我解决以下问题。

以下使用有效的完整字符串:

<xsl:when test="name(.)='personA'"><xsl:value-of select="../../../../../../../../../*[self::CompositionPackage]
                                                            [PackageID=current()
                                                            /personA_ID]
                                                            /PackageName"/></xsl:when>

在这里,我尝试使用仅使用前 53 个字符的子字符串,但在第 3 行失败

<xsl:when test="name(.)='personA'"><xsl:value-of select="../../../../../../../../../*[self::CompositionPackage]
                                                            [substring(PackageID,1,53)=current()
                                                            /substring(personA_ID,1,53)]
                                                            /PackageName"/>
                                                            </xsl:when>

任何帮助将不胜感激。 谢谢 阿德里安

【问题讨论】:

    标签: xml xslt xml-parsing


    【解决方案1】:

    我认为你想要substring(PackageID,1,53) = substring(current()/personA_ID, 1, 53) 而不是substring(PackageID,1,53)=current()/substring(personA_ID,1,53)

    【讨论】:

    • 感谢 Martin 的快速响应,如果我使用它,我会收到错误 "function Substing not found" 。
    • 如果我让它使用字符串中的全部 71 个字符,则第 2 行的第一个子字符串可以工作。 '[substring(PackageID,1,71)=current()' 并保留第 3 行,如示例 1 所示。但我仍然需要使用 53 个字符匹配 personA_ID 子字符串。
    • 如果您需要更多帮助,我认为您需要向我们展示 XML 示例和上下文。语法 current()/substring(PersonA_ID, 1, 53) 在 XSLT/XPath 2.0 中是可能的,但在 XSLT/XPath 1.0 中是不可能的。因此,我们可以更正并建议仅根据所提供的 XSLT 代码的语法进行更改。如果不查看输入数据,则很难判断建议的更改是否与您要比较的内容进行比较。
    • 其实这行得通,胖手指是罪魁祸首。谢谢马丁。非常感谢您的时间。
    猜你喜欢
    • 2020-10-16
    • 2018-10-13
    • 2016-03-05
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多