我有一个问题,我需要检查我的xml中是否存在特定值。如果该值存在,则该记录不应映射到目标模式。 xml和xsd非常大,所以我会尝试简化它,它看起来像这样。
<ns0:Root xmlns:ns0="http://Schema1">
<Person>
<Employment>
<EmploymentPeriod>
<lart code="0674" />
</EmploymentPeriod>
<EmploymentPeriod>
<lart code="2222" />
</EmploymentPeriod>
</Employment>
<Employment>
<EmploymentPeriod>
<lart code="0198" />
</EmploymentPeriod>
</Employment>
</Person>
<Person>
<Employment>
<EmploymentPeriod>
<lart code="0133" />
</EmploymentPeriod>
</Employment>
</Person>
</ns0:Root>
基本上,一个人可以包含多个具有多个就业期的就业要素。我需要检查记录lart及其代码属性是否具有值0198,如果那样,那个人不应该映射到目标模式。
<xsl:if test="ns0:Employment/ns0:EmploymentPeriod/ns0:lart[@code=0198]">
删除大部分人,但有些人通过。我尝试了很多不同的方法,但xslt不是我强大的一面。
可能是xslt代码只检查第一份就业记录中的值吗?
非常感谢任何帮助。
答案 0 :(得分:0)
不确定这是否正是您所寻找的,但可能会给您一个大致的想法。这个样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Person[descendant::lart[@code=0198]]">
<xsl:comment>Do not map person with lart/@code = 0198</xsl:comment>
</xsl:template>
</xsl:stylesheet>
生成这个xml:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Root xmlns:ns0="http://Schema1">
<!--Do not map person with lart/@code = 0198-->
<Person>
<Employment>
<EmploymentPeriod>
<lart code="0133"/>
</EmploymentPeriod>
</Employment>
</Person>
</ns0:Root>
根据你的描述,它听起来像你有一个具有多个Employment / EmploymentPeriods的Person节点的情况,整个Person节点将被抑制。
不确定你的意思是什么&#34;没有映射&#34;,在这个有限的例子中,我认为它意味着在输出中被省略。