XSLT 在映射之前检查内容

科伊

我需要一些有关 XSLT 的帮助来检查每个<Info>带有@Type="bar".

如果它们的子<Ref>元素都包含在子<Ref>元素中的<Info>元素with中@Type="foo",我想要一个<Info>@Type="foo"在目标中创建的同一个<Refs>

我为 XSLT 中缺少动态 updatebale 变量而苦苦挣扎!

请参阅下面的来源和预期目标

来源

 <?xml version="1.0" encoding="UTF-8"?>
    <Infos>
        <Info Type="foo">
            <Refs>
                <Ref>1</Ref>
                <Ref>2</Ref>
                <Ref>3</Ref>
            </Refs>
            <Content>FOO CONTENT</Content>
        </Info>
        <Info Type="bar">
            <Refs>
                <Ref>1</Ref>
                <Ref>2</Ref>
            </Refs>
            <Content>BAR 1 CONTENT</Content>
        </Info>
        <Info Type="bar">
            <Refs>
                <Ref>3</Ref>
            </Refs>
            <Content>BAR 2 CONTENT</Content>
        </Info>
        <Info Type="bar">
            <Refs>
                <Ref>4</Ref>
            </Refs>
            <Content>BAR 3 CONTENT</Content>
        </Info>
    </Infos>

预期目标

<?xml version="1.0" encoding="UTF-8"?>
<Infos>
    <Info Type="foo">
        <Refs>
            <Ref>1</Ref>
            <Ref>2</Ref>
        </Refs>
        <Content>FOO CONTENT</Content>
    </Info>
        <Info Type="foo">
        <Refs>
            <Ref>3</Ref>
        </Refs>
        <Content>FOO CONTENT</Content>
    </Info>
    <Info Type="bar">
        <Refs>
            <Ref>1</Ref>
            <Ref>2</Ref>
        </Refs>
        <Content>BAR 1 CONTENT</Content>
    </Info>
    <Info Type="bar">
        <Refs>
            <Ref>3</Ref>
        </Refs>
       <Content>BAR 2 CONTENT</Content
    </Info>
    <Info Type="bar">
        <Refs>
            <Ref>4</Ref>
        </Refs>
       <Content>BAR 3 CONTENT</Content
    </Info>
</Infos>

因此,请注意创建的两个 foo 元素,因为原始元素的引用为 1,2,3,其中一个 bar 为 1,2,一个 bar 为 3。

此外,原始 bar 元素完全按照 source 进行映射。

michael.hor257k

如果我理解正确(这完全不确定),你想做:

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="foo" match="Info[@Type='foo']" use="Refs/Ref" />

<xsl:template match="/Infos">
    <xsl:copy>
        <xsl:apply-templates select="Info[@Type='bar'][key('foo', Refs/Ref)]" mode="foo"/>
        <xsl:copy-of select="Info[@Type='bar']"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="Info" mode="foo">
    <Info Type="foo">
        <xsl:copy-of select="Refs"/>
        <xsl:copy-of select="key('foo', Refs/Ref)/*[not(self::Refs)]"/>
    </Info>
</xsl:template>

</xsl:stylesheet>

基本上,这会获取bar与 下列出的引用之一匹配的所有节点,将foo它们重新创建为foo节点并从匹配foo节点复制内容然后它按原样复制所有bar节点

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

XSLT 1.0映射检查当前节点

来自分类Dev

XSLT-通过检查内容获取节点

来自分类Dev

在XSLT / Umbraco中进行每次检查之前检查项目计数

来自分类Dev

在XSLT / Umbraco中进行每次检查之前检查项目计数

来自分类Dev

兄弟节点的XSLT映射

来自分类Dev

XSLT映射元素名称

来自分类Dev

打破祖先的内容 - XSLT

来自分类Dev

使用XSLT映射XML数据

来自分类Dev

XSLT映射元素复制文件

来自分类Dev

使用 XSLT 映射 XML 元素

来自分类Dev

XSLT删除节点但保留内容

来自分类Dev

XSLT-带条件的XML映射

来自分类Dev

用于删除命名空间的 XSLT 映射

来自分类Dev

XSLT,将 id 映射到新值

来自分类Dev

如何在 xslt 映射中添加 newLine

来自分类Dev

XSLT测试文本或其他内容

来自分类Dev

XSLT-循环内的字段内容验证

来自分类Dev

XSLT编码缺少某些内容-xsl:choose

来自分类Dev

XSLT处理混合内容中的空白

来自分类Dev

编码包含标签的xslt变量的内容

来自分类Dev

使用xslt反转XML中的内容

来自分类Dev

xslt 2.0 group-starting-with by元素内容

来自分类Dev

检查节点是否存在的XSLT条件

来自分类Dev

如何检查xslt中出现的空网址

来自分类Dev

XSLT检查String是否在集合内

来自分类Dev

XSLT如何检查XML节点是否存在?

来自分类Dev

在xslt中检查多个匹配条件

来自分类Dev

检查XSLT中是否存在XML节点

来自分类Dev

检查xslt大小写吗?