我有以下XML设置:
<?xml version="1.0" encoding="utf-16"?>
<form>
<answers>
<moz_generiek>Hello World</moz_generiek>
<moz_opdracht>Mission 1</moz_opdracht>
<moz_opdracht2>Mission 2</moz_opdracht2>
<moz_opdracht3>Mission 3</moz_opdracht3>
<moz_opdracht4>Mission 4</moz_opdracht4>
<moz_opdracht5>Mission 5</moz_opdracht5>
<moz_opdracht6>Mission 6</moz_opdracht6>
<moz_opdracht7>Mission 7</moz_opdracht7>
<moz_opdracht8>Mission 8</moz_opdracht8>
<moz_opdracht9>Mission 9</moz_opdracht9>
<set_kenmerk_api>
<moz_opdracht id="1">SubMission1</moz_opdracht>
<moz_opdracht id="2">SubMission2</moz_opdracht>
<moz_opdracht id="3">SubMission3</moz_opdracht>
<moz_opdracht id="4">SubMission4</moz_opdracht>
<moz_opdracht id="5">SubMission5</moz_opdracht>
</set_kenmerk_api>
</answers>
</form>
我使用这个XSLT样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<moz_koppelverzoek>
<moz_koppelverzoekreferentie><![CDATA[Important]]></moz_koppelverzoekreferentie>
<xsl:apply-templates select="/form/answers/moz_generiek"/>
<moz_opdrachten>
<xsl:apply-templates select="/form/answers/moz_opdracht"/>
<xsl:apply-templates select="/form/answers/moz_opdracht2"/>
<xsl:apply-templates select="/form/answers/moz_opdracht3"/>
<xsl:apply-templates select="/form/answers/moz_opdracht4"/>
<xsl:apply-templates select="/form/answers/moz_opdracht5"/>
<xsl:apply-templates select="/form/answers/moz_opdracht6"/>
<xsl:apply-templates select="/form/answers/moz_opdracht7"/>
<xsl:apply-templates select="/form/answers/set_kenmerk_api/moz_opdracht"/>
<xsl:apply-templates select="/form/answers/moz_opdracht8"/>
<xsl:apply-templates select="/form/answers/moz_opdracht9"/>
</moz_opdrachten>
</moz_koppelverzoek>
</xsl:template>
<xsl:template match="moz_generiek">
<xsl:element name="moz_generiek">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht2">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht3">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht4">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht5">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht6">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht7">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht8">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="moz_opdracht9">
<xsl:element name="moz_opdracht">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
创建以下结果:
<moz_koppelverzoek>
<moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie>
<moz_generiek>Hello World</moz_generiek>
<moz_opdrachten>
<moz_opdracht>Mission 1</moz_opdracht>
<moz_opdracht>Mission 2</moz_opdracht>
<moz_opdracht>Mission 3</moz_opdracht>
<moz_opdracht>Mission 4</moz_opdracht>
<moz_opdracht>Mission 5</moz_opdracht>
<moz_opdracht>Mission 6</moz_opdracht>
<moz_opdracht>Mission 7</moz_opdracht>
<moz_opdracht>SubMission1</moz_opdracht>
<moz_opdracht>SubMission2</moz_opdracht>
<moz_opdracht>SubMission3</moz_opdracht>
<moz_opdracht>SubMission4</moz_opdracht>
<moz_opdracht>SubMission5</moz_opdracht>
<moz_opdracht>Mission 8</moz_opdracht>
<moz_opdracht>Mission 9</moz_opdracht>
</moz_opdrachten>
</moz_koppelverzoek>
我现在需要的是,我想重新复制Mission 9下的所有提交内容。如果Mission 8节点是原始XML。
有时行:<moz_opdracht8>Mission 8</moz_opdracht8>
和9在原始XML中,有时它们不是。
如何获得以下结果XML IF <moz_opdracht8>
在带有IF语句的XML中
<moz_koppelverzoek>
<moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie>
<moz_generiek>Hello World</moz_generiek>
<moz_opdrachten>
<moz_opdracht>Mission 1</moz_opdracht>
<moz_opdracht>Mission 2</moz_opdracht>
<moz_opdracht>Mission 3</moz_opdracht>
<moz_opdracht>Mission 4</moz_opdracht>
<moz_opdracht>Mission 5</moz_opdracht>
<moz_opdracht>Mission 6</moz_opdracht>
<moz_opdracht>Mission 7</moz_opdracht>
<moz_opdracht>SubMission1</moz_opdracht>
<moz_opdracht>SubMission2</moz_opdracht>
<moz_opdracht>SubMission3</moz_opdracht>
<moz_opdracht>SubMission4</moz_opdracht>
<moz_opdracht>SubMission5</moz_opdracht>
<moz_opdracht>Mission 8</moz_opdracht>
<moz_opdracht>Mission 9</moz_opdracht>
<moz_opdracht>SubMission1</moz_opdracht>
<moz_opdracht>SubMission2</moz_opdracht>
<moz_opdracht>SubMission3</moz_opdracht>
<moz_opdracht>SubMission4</moz_opdracht>
<moz_opdracht>SubMission5</moz_opdracht>
</moz_opdrachten>
</moz_koppelverzoek>
答案 0 :(得分:1)
您还可以对整个转换使用不同的方法:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="form">
<moz_koppelverzoek>
<moz_koppelverzoekreferentie>Important</moz_koppelverzoekreferentie>
<xsl:apply-templates select="answers/moz_generiek"/>
<moz_opdrachten>
<xsl:apply-templates select="answers/*[not(name()='moz_generiek')]"/>
</moz_opdrachten>
</moz_koppelverzoek>
</xsl:template>
<xsl:template match="answers">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="set_kenmerk_api"/>
<xsl:template match="*[name() = 'moz_opdracht9' and /*/*/moz_opdracht8]" priority="1">
<xsl:call-template name="mo"/>
<xsl:apply-templates select="../set_kenmerk_api/moz_opdracht"/>
</xsl:template>
<xsl:template match="*[name() = 'moz_opdracht7']" priority="1">
<xsl:call-template name="mo"/>
<xsl:apply-templates select="../set_kenmerk_api/moz_opdracht"/>
</xsl:template>
<xsl:template match="*[starts-with(name(),'moz_opdracht')]" name="mo">
<moz_opdracht>
<xsl:apply-templates/>
</moz_opdracht>
</xsl:template>
</xsl:stylesheet>
这在我看来简化了样式表。
答案 1 :(得分:0)
我现在需要的是,我想重新复制下面的所有提交内容 任务9如果任务8节点是原始XML。
使用强>:
<xsl:apply-templates select="/form/answers[moz_opdracht8]/moz_opdracht9"/>