我正在使用XSL3.0创建一个XML文件,该文件组合了两个源XML文件(XSL和两个XML文件在同一目录中)。这些源代码被称为people.xml和depositions.xml。
people.xml文件是一个人员列表,如下所示:
<personlist>
<person id="foo_andrew">
<lastname>Foo</lastname>
<firstname>Andrew</firstname>
</person>
<person id="foo_barbara">
<lastname>Foo</lastname>
<firstname>Barbara</firstname>
</person>
<person id="foo_chris">
<lastname>Foo</lastname>
<firstname>Chris</firstname>
</person>
...
</personlist>
此文件中的这些人将使用@id
出现在证词文件中
<corpus>
<deposition id="1">
<p n="1">Suspendisse eu nunc <person id="foo_andrew"/>tristique ex aliquam imperdiet. Quisque volutpat est sed <person id="foo_barbara"/>ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a dolor consequat, <person id="foo_chris"/>congue leo et, porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque facilisis dui tincidunt <person id="foo_andrew"/>semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
<deposition id="2">
<p n="1">Suspendisse eu nunc tristique ex aliquam imperdiet. Quisque volutpat est sed ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a dolor consequat, congue leo et, <person id="foo_barbara"/>porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque facilisis dui <person id="foo_chris"/>tincidunt semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
<deposition id="3">
<p n="1">Suspendisse eu nunc tristique <person id="foo_chris"/>ex aliquam imperdiet. Quisque volutpat est sed ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a <person id="foo_andrew"/>dolor consequat, congue leo et, porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque <person id="foo_barbara"/>facilisis dui tincidunt semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
</corpus>
我想输出一个XML文件,它将人的每一个外观组合成一个文件。它看起来像下面这样--每次这个人出现在证词中时,都会创建一个<deposition>
--但只会创建一个<deposition>
,即使它们出现了多次
<personappear>
<person id="foo_andrew">
<lastname>Foo</lastname>
<firstname>Andrew</firstname>
<listappear>
<deposition>1</deposition>
<deposition>3</deposition>
</listappear>
</person>
<person id="foo_barbara">
<lastname>Foo</lastname>
<firstname>Barbara</firstname>
<listappear>
<deposition>1</deposition>
<deposition>2</deposition>
<deposition>3</deposition>
</listappear>
</person>
<person id="foo_chris">
<lastname>Foo</lastname>
<firstname>Chris</firstname>
<listappear>
<deposition>1</deposition>
<deposition>2</deposition>
<deposition>3</deposition>
</listappear>
</person>
...
</personlist>
我甚至不知道如何在一个XSL中访问两个独立的XML文件的基本原理!这阻止了我部署密钥等来组合记录。
非常提前谢谢你。
发布于 2018-06-05 05:12:55
至于加载辅助文档,请使用doc('depositions.xml')
或document('depositions.xml')
。对于参考,你是对的,一个键可以帮助你:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
expand-text="yes"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output indent="yes"/>
<!-- make <xsl:param name="deposition-doc" select="doc('depositions.xml')"/> -->
<xsl:param name="deposition-doc">
<corpus>
<deposition id="1">
<p n="1">Suspendisse eu nunc <person id="foo_andrew"/>tristique ex aliquam imperdiet. Quisque volutpat est sed <person id="foo_barbara"/>ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a dolor consequat, <person id="foo_chris"/>congue leo et, porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque facilisis dui tincidunt <person id="foo_andrew"/>semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
<deposition id="2">
<p n="1">Suspendisse eu nunc tristique ex aliquam imperdiet. Quisque volutpat est sed ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a dolor consequat, congue leo et, <person id="foo_barbara"/>porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque facilisis dui <person id="foo_chris"/>tincidunt semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
<deposition id="3">
<p n="1">Suspendisse eu nunc tristique <person id="foo_chris"/>ex aliquam imperdiet. Quisque volutpat est sed ullamcorper ultricies. Proin vel nunc in arcu tristique finibus.</p>
<p n="2">Cras a <person id="foo_andrew"/>dolor consequat, congue leo et, porttitor mi. Integer pretium tellus id lobortis faucibus.</p>
<p n="3">Quisque <person id="foo_barbara"/>facilisis dui tincidunt semper blandit. Aenean auctor sem augue, sit amet malesuada neque mattis id.</p>
</deposition>
</corpus>
</xsl:param>
<xsl:key name="ref" match="deposition" use=".//person/@id"/>
<xsl:template match="person">
<xsl:copy>
<xsl:copy-of select="@*, node()"/>
<listappear>
<xsl:for-each select="key('ref', @id, $deposition-doc)">
<deposition>{@id}</deposition>
</xsl:for-each>
</listappear>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
https://stackoverflow.com/questions/50688532
复制相似问题