如果存在“Name1”的节点,并且如果节点“Name1”不存在,并且如果整个数据节点不存在,则我想添加新关键字,然后添加整个预定义部分,如下所示:
<Data>
<Keyword>Keyword1</keyword>
<Name>Name1</Name>
<Data>
For Above我在XSL中使用以下逻辑:
<xsl:param name="AddKeywords">
<!-- Predefine Structure for Add Keyword -->
</xsl:param>
<xsl:template
match="data/[Name='Name1']/keyword[position()=last()]">
<xsl:copy-of select="$AddKeywords"/>`
</xsl:template>
<xsl:param name="AddDataSection">
<!-- Predefine Structure to Add Whole New Data Section -->
</xsl:param>
<xsl:template
match="data/[Name!='Name1'][position()=last()]">
<xsl:copy-of select="$AddDataSection"/>
</xsl:template>
现在的问题是文档中有多个数据部分,所以如果在第一部分中找到Name1,那么新的关键字是add,但之后还有多个数据节点不存在Name1数据,所以它在第一个数据部分添加关键字以及还创建了全新的数据部分,因此重复问题出现了。因此,两个模板都是由于多个数据部分而执行的。
那么问题是什么?
答案 0 :(得分:0)
我不是100%清楚你在问什么,但这可能就是你所追求的。
“如果Data
元素包含带有文字Name
的子Name1
元素,那么会将一些常量关键字附加到现有Keywords
}孩子。
“如果Data
元素没有包含文字Name
的子Name1
元素,则删除Data
的所有内容并将其替换为默认值,填充了Keyword
和Name
子元素。
<?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"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="extraKeywords">,hello,world</xsl:variable>
<xsl:variable name="missingDataSection">
<Keyword>SomeDefaultKeywords</Keyword>
<Name>SomeDefaultName</Name>
</xsl:variable>
<xsl:template match="Keyword[ancestor::Data[Name='Name1']]">
<Keyword>
<xsl:value-of select="."/>
<xsl:value-of select="$extraKeywords"/>
</Keyword>
</xsl:template>
<xsl:template match="Data[Name!='Name1']">
<Data>
<xsl:copy-of select="$missingDataSection"></xsl:copy-of>
</Data>
</xsl:template>
</xsl:stylesheet>
当应用于此Xml时:
<xml>
<Data>
<Keyword>Keyword1</Keyword>
<Name>Name1</Name>
</Data>
<Data>
<Keyword>AnotherKeyword</Keyword>
<Name>NotName1</Name>
</Data>
</xml>
产生这个结果:
<?xml version="1.0" encoding="utf-8"?>
<xml>
<Data>
<Keyword>Keyword1,hello,world</Keyword>
<Name>Name1</Name>
</Data>
<Data>
<Keyword>SomeDefaultKeywords</Keyword>
<Name>SomeDefaultName</Name>
</Data>
</xml>