XSLT - 参考 HREF 元素

发布于 2025-01-10 22:04:48 字数 907 浏览 0 评论 0原文

我有一个以下格式的 XML

<Envelope>
<Body>
<Ref id="ref1">
<user>Test1</user>
<company>Comp1</company>
<message href="#ref3" />
</Ref>
<Ref id="ref2">
<user>Test2</user>
<company>Comp2</company>
<message href="#ref4" />
</Ref>
<Ref id="ref3">Test message 1</Ref>
<Ref id ="ref4">Test message 2</Ref>
</Body>
</Envelope>

使用 XLST 我想将上面的 XML 转换如下。我对 XSLT 完全陌生,任何人都可以帮助我完成此

预期输出:

<Envelope>
<Body>
<Ref>
<user>Test1</user>
<company>Comp1</company>
<message>Test message 1</message>
</Ref>
<Ref>
<user>Test2</user>
<company>Comp2</company>
<message>Test message 1</message>
</Ref>
</Body>
</Envelope>

I have a XML in the below format

<Envelope>
<Body>
<Ref id="ref1">
<user>Test1</user>
<company>Comp1</company>
<message href="#ref3" />
</Ref>
<Ref id="ref2">
<user>Test2</user>
<company>Comp2</company>
<message href="#ref4" />
</Ref>
<Ref id="ref3">Test message 1</Ref>
<Ref id ="ref4">Test message 2</Ref>
</Body>
</Envelope>

Using XLST I want to transform the above XML as below .I am totally new to XSLT, Can anyone please help me with this

Expected Output:

<Envelope>
<Body>
<Ref>
<user>Test1</user>
<company>Comp1</company>
<message>Test message 1</message>
</Ref>
<Ref>
<user>Test2</user>
<company>Comp2</company>
<message>Test message 1</message>
</Ref>
</Body>
</Envelope>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆啦不做梦 2025-01-17 22:04:48

我将使用 @id 作为查找键,为 Ref 元素创建一个 xsl:key

message/@href 的模板,使用其值作为查找消息的键,以及 Ref 元素的另一个空模板,仅包含用于抑制消息的消息输出。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    
    <xsl:key name="message" match="Ref" use="@id"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="message/@href">
        <xsl:value-of select="key('message', substring-after(., '#'))"/>
    </xsl:template>
    
    <xsl:template match="Ref[not(*)]"/>
    
</xsl:stylesheet>

I would create an xsl:key for the Ref elements, using the @id as the lookup key.

A template for the message/@href that uses it's value as the key to lookup a message, and another empty template for the Ref elements that only have messages to suppress them from output.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    
    <xsl:key name="message" match="Ref" use="@id"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="message/@href">
        <xsl:value-of select="key('message', substring-after(., '#'))"/>
    </xsl:template>
    
    <xsl:template match="Ref[not(*)]"/>
    
</xsl:stylesheet>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文