在这里,我粘贴了一个XML示例,它是标记名称,例如21A,50F,21D,22B

通常,如果需要获取特定标签,可以在XSLT中轻松使用以下逻辑:

<xsl:choose>
    <xsl:when test="tag[name = '21A'] ">
        <xsl:choose>
            <xsl:when test="substring(tag[name = '21A']/value,1,1) = '/'">
                <xsl:variable name="result" select="concat(translate(tag[name = '21A']/value,',',' '),'&#13;')"/>
                <xsl:value-of select="substring(substring-before(substring-after($result,'&#13;'),'&#13;'),1,11)"/>
            </xsl:when>
            <xsl:when test="substring(tag[name = '21A']/value,1,1) != '/'">
                <xsl:value-of select="substring(tag[name = '21A']/value,1,11)"/>
            </xsl:when>
        </xsl:choose>
    </xsl:when>
</xsl:choose>

但在这里我有一个要求,即Sequence ASequence B

  • 高于50F的标签位于sequence A
  • 填充在50F以下的标签位于sequence B

因为我们需要基于使用50F标签来获取标签。 有人可以提出建议吗?

<local>
    <message>
        <block4>
            <tag>
                <name>21A</name>
                <value>ALW1031</value>
            </tag>
            <tag>
                <name>50F</name>
                <value>TESTING CITI BANK EFT9</value>
            </tag>
            <tag>
                <name>21D</name>
                <value>OUR</value>
            </tag>
            <tag>
                <name>22B</name>
                <value>ipubby</value>
            </tag>
        </block4>
    </message>
</local>

需要的输出:

ALW1031,OUR

以前,假设它们两次填充了21A ,则意味着在调用标记值时,我将位置用作[1]和[2]。 现在它们将重复填充21个标签,但是标签可能是AD因此我需要盲目地定位50f标签。 无论他们提供的标签是什么,无论是50F之前的A还是D ,我都需要类似地获取,只要它们能够填充50F之后的标签,我们就可以获取,因此请避免放置位置。


摘要@Treemonkey :希望您对我的示例XML有所了解。 它具有一些标签,例如21A,50F等。 假设我之前有两个字段field1,field2 ,它们填充的标签与21A相同,是重复的标签,那时我通过标记字段1的位置[1]提取了21A旁边的tag[name = '21A'][1]tag[name = '21A'][1]

类似地, 21A在旁边通过标记字段2的位置[2]来进行填充,现在它们将填充21但标签却不同为AD 正如我已经说过的, field1应该集中sequence Afield2应该集中为sequence B所以现在我们不应该为获取位置而烦恼,我们有一个类似标签50F无论在50F必须被视为sequence A和之后50F必须被视为sequence B

因此,最后我们需要针对50 F编写XSLT。如果我想在50F之前在(样本XML)中显示21A字段,那么我们需要在XSLT中写逻辑作为选择标签21A50F之前生成字段1中的数据和场2,我们需要为获取21D50F ,所以我们需要写一个逻辑选择21D50F

===============>>#1 票数:0 已采纳

您的要求不是很清楚,但是以下表达式应该有所帮助。

选择其子name具有特定值的tag之前的所有同级:

/*/*/*/tag[name='50F']/preceding-sibling::*

选择以下同级:

/*/*/*/tag[name='50F']/following-sibling::*

只选择前一个元素:

/*/*/*/tag[name='50F']/preceding-sibling::*[1]

选择具有特定值的子name先前兄弟姐妹:

/*/*/*/tag[name='50F']/preceding-sibling::*[name='21A']

选择以下具有相同子name同级兄弟:

/*/*/*/tag[name='50F']/following-sibling::*[name='21D']

  ask by pravz translate from so

未解决问题?本站智能推荐:

1回复

XSLT按特定标签分组

我有这个XML文件: 并使用此XSLT 1.0代码(已更新): 我有这个结果(更新): 但我需要根据增值税率进行分组,结果将如下所示: 并请注意, <Rate/VATRate>标签可以考虑<percent>或<Excempt>等
1回复

如果以下兄弟姐妹中存在特定标签,则匹配标签

我有一个xml,其中只有后面有至少一个标签<C>作为同级标签,才可以转换我的标签<T> 。 应该变成: T1A1T2C2X1 我目前有: 不确定如何实现match="T[following-sibling::* ??? exists C"
2回复

xsl转换有助于删除特定标签

给定xml的这一部分,我需要删除所有具有xsi:nil="true"标记 我当前正在使用此XSL删除空白节点,因此也需要保留该空白节点。 附在下面。 谢谢。 XML: XSL
2回复

如何在XSLT中获取标签值

我有一个样本XML 我正在使用的XSLT 我可以读取除pegHorizo​​ntal和pegVertical值之外的所有值,这些值在数据末尾分别为10和20。 预期输出应为 有人可以指导最后添加什么代码。 请不要更改完整的代码,因为我还有其他部分。
1回复

缺少第二个p标签如何获取它

我没有在xsl中获得第二个p标签...在下面提供我的代码... http://xsltransform.net/b4GWV9/17 在下面提供我的html输出 http://jsfiddle.net/F9wh7/
2回复

在xsl:for-each之后获取标签值

我有以下XML: 如果问题编号为2,我正在使用XSLT 1.0获取Response的值:我需要进一步查询它,并根据它输出不同的值。 我已经试过了: ...但是XSLT无法验证。 在此先感谢您的协助。
2回复

如何在XSLT中获取标签名称? [重复]

这个问题已经在这里有了答案: 在XPATH 2中 获取元素名称 我做了一个简单的xslt示例。 我想在h2显示标签名称。 如何使用xslt显示标签名称? 这是我的代码: 链接 我用这个 它给了我一个错误。 为什么? 预期产量:
1回复

如何使用XSLT删除特定标识符

如何删除特定标识符并使​​用xslt更改元素标签? 例如,如果输出的值包含标识符“ ALPHA”,则需要在输出值中将其删除,并且标记名称将变为<Alpha> 。 如果它包含标识符“ ZERO”,则元素标签将变为<Zero>并在输出中删除标识符ZERO。 范例 :
1回复

如何使用嵌套标签父标签

我有一个看起来像这样的XML文件: 要求的输出: 如何使用<LN>添加每个<SN>标签?
1回复

XSLT:如何仅选择出现在特定嵌套标签之前的文本,而不选择出现在标签之后的文本?

我是xslt的新手。 我的xml代码是: 我想接收以下输出: 文字1文字2文字3 我写了两个模板: 但是我得到这个: 文字2文字1文字3 我的问题是:如何区分text1和text3?