gpt4 book ai didi

xslt - 根据任何属性的值获取数据

转载 作者:行者123 更新时间:2023-12-02 05:40:35 25 4
gpt4 key购买 nike

给定一个节点,例如。

<SI elem1="TI" elem2="FN" elem3="4099450222" elem4="TM" elem5="4094110000" elem6="MT" elem7="SP" elem8="MC" elem9="DS" elem10="DA" elem11="16"/>

如果任何属性是“DA”,我需要我的输出是“DA”,或者如果任何属性是“BA”,我需要输出下一个属性的值(即如果 elem7="BA elem8="03"我想要“03 “输出)

没有多重匹配的危险,所以如果一个属性是“BA”,就不会有“DA”属性,但是值可以出现在任何元素中

我查看了 attribute::标签,但我不确定这是否能满足我的需求。

非常感谢任何帮助

最佳答案

我假设您的属性具有 elemN 形式的名称,其中 N = 1,2,3...,并相应地进行排序。

以下 XSLT:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" />
<xsl:template match="/SI">
<xsl:choose>
<xsl:when test="some $i in @* satisfies $i='DA'">
<xsl:text>DA</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="attr" select="concat('elem', xs:decimal(substring-after(@*[.='BA']/name(), 'elem')) + 1)" />
<xsl:value-of select="@*[name() = $attr]" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

应用于以下输入 XML:

<?xml version="1.0" encoding="UTF-8"?>
<SI elem1="TI" elem2="FN" elem3="4099450222" elem4="TM" elem5="4094110000" elem6="MT" elem7="SP" elem8="MC" elem9="DS" elem10="DA" elem11="16" />

DA 作为输出。

并应用于以下 XML:

<?xml version="1.0" encoding="UTF-8"?>
<SI elem1="TI" elem2="FN" elem3="4099450222" elem4="TM" elem5="4094110000" elem6="MT" elem7="BA" elem8="03" elem9="DS" elem10="DAs" elem11="16" />

03 作为输出。

编辑

这是 XSLT 1.0 版本(在 Altova XMLSpy 下测试):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="SI/@*" />
</xsl:template>

<xsl:template match="@*">
<xsl:choose>
<xsl:when test=". = 'DA'">
<xsl:text>DA</xsl:text>
</xsl:when>
<xsl:when test=".='BA'">
<xsl:variable name="attr" select="concat('elem', substring-after(name(), 'elem') + 1)" />
<xsl:value-of select="/SI/@*[name() = $attr]" />
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

关于xslt - 根据任何属性的值获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com