0

我有一个大型 XML 文件和另一个小型 XML 文件,其名称与某些大型 XML 文件的属性值之一匹配。我想使用小的 XML 文件创建大型 XML 文件的记录子集。我的 XSL 尝试是这样的

<xsl:stylesheet xmlns:t="http://www.xyz.com/xml/Fixit" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="t:Fixit[.//t:Name[(@OrganisationName!=document('single_include.xml')//OrganisationName)]]"></xsl:template>
</xsl:stylesheet>

我的名为“single_include.xml”的小 XML 文件是这样的

<ListOfOrganisationName>
<OrganisationName>
The first organisation
</OrganisationName>
<OrganisationName>
The second organisation
</OrganisationName>
</ListOfOrganisationName>

它似乎只适用于第一条记录。有任何想法吗?

希望这是有道理的。

4

1 回答 1

0

“排除”模板中的内部谓词

(@OrganisationName!=document('single_include.xml')//OrganisationName)

如果有任何 不等于当前元素的属性OrganisationName,则为真。这将排除“第二个组织”,因为在过滤文件(“第一个组织”)中有一个它不相等。相反,您可能想要single_include.xmlOrganisationNameOrganisationName

not(@OrganisationName=document('single_include.xml')//OrganisationName)

仅当没有 等于当前元素的OrganisationName属性时才成立。XPath 规范在第 3.4 节中指出了这一点,它说single_include.xmlOrganisationName

注意:如果$x绑定到一个节点集,那么$x="foo"并不意味着与not($x!="foo")

于 2012-07-25T12:26:21.980 回答