XSLT:将变量保存为XML
我的当前样式表如下。它会查找<IMFile>
的所有节点并删除这些子节点。我想增加另一个条件,但我不确定如何做到这一点。XSLT:将变量保存为XML
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Removes red boxes -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Strip IMFile elements -->
<xsl:template match="IMFile[@src='@variable']"/>
</xsl:stylesheet>
所以下面是我需要看的两个部分。主要我只需要知道如何获取和使用变量。我想查看这个源代码部分,并保存1个id,当src="Red_Box.png"
时引用。并将此变量应用于我的代码(替换@variable)。此ID反映<IMFile>
元素的@src
属性。
<SourceBin id="3" >
<Source id="4" src="something.trec" lastMod="20161202T191501" rect="(0,0,1920,1080)">
<SourceTrack range="(0,9463)" type="0" editRate="30/1" trackRect="(0,0,1920,1080)" sampleRate="0/1" bitDepth="0" numChannels="0" filename="something.trec.trec!Strack0.tsc2" metaData="something.trec;" />
</Source>
<Source id="5" src="screenshot_449.png" lastMod="20161202T191503" rect="(0,0,1912,1078)" >
<SourceTrack range="(0,1)" type="1" editRate="10000000/1" trackRect="(0,0,1912,1078)" sampleRate="0/1" bitDepth="24" numChannels="0" filename="" metaData="" />
</Source>
<Source id="6" src="Red-Box.png" lastMod="20161202T191503" rect="(0,0,1600,1200)" >
<SourceTrack range="(0,1)" type="1" editRate="10000000/1" trackRect="(0,0,1600,1200)" sampleRate="0/1" bitDepth="32" numChannels="0" filename="" metaData="" />
</Source>
</SourceBin>
<IMFile id="6907" start="754" duration="8" scalar="1/1" mediaStart="0/1" mediaDuration="1/1" trackNumber="0" src="5" trimStartSum="67/1" >
<IMFile id="6907" start="754" duration="8" scalar="1/1" mediaStart="0/1" mediaDuration="1/1" trackNumber="0" src="6" trimStartSum="67/1" >
<IMFile id="6907" start="754" duration="8" scalar="1/1" mediaStart="0/1" mediaDuration="1/1" trackNumber="0" src="6" trimStartSum="67/1" >
如果我有以上3 IMFile我希望它看到,其中2使用src =“6”(这是使用Red_Box.png源孩子的id)。而导致两者的删除:(!)
<IMFile id="6907" start="754" duration="8" scalar="1/1" mediaStart="0/1" mediaDuration="1/1" trackNumber="0" src="5" trimStartSum="67/1" >
如果我猜测正确的话,你想要做的事,如:
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="source-by-id" match="Source" use="@id" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Strip IMFile elements -->
<xsl:template match="IMFile[key('source-by-id', @src)/@src='Red-Box.png']"/>
</xsl:stylesheet>
这将消除任何(通过key)链接到其src
属性为"Red-Box.png"
的Source
元素。
演示(使用合式输入):http://xsltransform.net/ejivdJc
你真了不起!太棒了!我什至不知道它是如何获得只有Red-Box.png id值,但它的作品(为我做的少数测试)! – Torewin
它通过**键**工作 - 这是XSLT工具箱中非常有用的工具。在这里,它允许你从'IMFile'的上下文中“查看”相关'Source'的src'值。 –
你会有什么期望的输出是什么样子?顺便说一下,你喜欢过滤掉XML中的Callout元素在哪里? [mcve]会有帮助(对于我们来回答你的问题)。 – zx485