XSLT - 参考 HREF 元素
XSLT - Refer HREF elements
我有一个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>
我会为 Ref
元素创建一个 xsl:key
,使用 @id
作为查找键。
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>
我有一个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>
我会为 Ref
元素创建一个 xsl:key
,使用 @id
作为查找键。
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>