我正在尝试使用XSLT1.0从xml中拆分一个值,我有一个类似
的XML<employees>
<examples>
<example id="1,2,3">
</example>
</examples>
<emp id="1">
<name>john</name>
</emp>
<emp id="2">
<name>raj</name>
</emp>
<emp id="3">
<name>sat</name>
</emp>
</employees>
我需要从示例标记中提取id并将其拆分并从emp
标记中获取值,表示输出应为
<employees>
<employee>
<id>1</id>
<name>john</name>
</employee>
<employee>
<id>2</id>
<name>raj</name>
</employee>
<employee>
<id>3</id>
<name>sat</name>
</employee>
</employees>
答案 0 :(得分:0)
我认为,而不是试图将示例元素上的@id属性拆分,这在XSLT1-0中有点混乱,您可以尝试匹配 \ temp 元素,其@id出现在属性的 请注意使用逗号来确保@id为1并未被示例@id为11 这是完整的XSLT 当应用于您的示例XML时,输出以下内容 <xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/>
<xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="employees">
<employees>
<xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/>
<xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/>
</employees>
</xsl:template>
<xsl:template match="emp">
<employee>
<id>
<xsl:value-of select="@id"/>
</id>
<xsl:apply-templates select="node()"/>
</employee>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<employees>
<employee>
<id>1</id>
<name>john</name>
</employee>
<employee>
<id>2</id>
<name>raj</name>
</employee>
<employee>
<id>3</id>
<name>sat</name>
</employee>
</employees>