【发布时间】:2019-09-19 13:03:23
【问题描述】:
我正在尝试编写一些 xslt 来枚举我的 xml(s!) 中的所有图像
我为此使用了一个密钥,以便我可以稍后在内容中引用图像, 我的问题是我无法弄清楚如何获得一致的价值。 意义: xml 引用了我使用 document() 加载的多个其他文档, 每当我“输入”一个新文档时,键都会被重置,所以在有 2 个图像的文档中我得到两个,在其他的一个
你可以想象
根文档:
<root>
<chapter href="chapters/doc1.xml"/>
<chapter href="chapters/doc2.xml"/>
</root>
doc1.xml
<root>
<image id="a"/>
<image id="b"/>
</root>
doc2.xml
<root>
<image id="f"/>
</root>
我在 stackoverflow 上发现了一个旧线程,我认为这有点像我的方向:XSLT: create 'key' across multiple documents? 但我无法让它工作。
目前的工作: 我已经定义了一个键
<xsl:key name="image" match="image" use="@id"/>
我以后会这样使用
key value for image:<xsl:value-of select="count(key('image', @id)/preceding::image) + 1"/>
这总是会产生上述结果(对于 doc1,我得到“key value for image:1 key value for image:2”bur,对于 doc2,我再次得到“key value for image:1”,在这里我希望得到 3)
为了适应链接的帖子,我尝试使用集合加载所有文档并创建一个新密钥,希望它至少会为我提供所有开始的图像
<xsl:key name="images" match="image" use="all"/>
<xsl:variable name="location"><xsl:value-of select="$xml-base"/>/chapters?select=*.xml;recurse=yes</xsl:variable>
<xsl:variable name="documents">
<xsl:value-of select="collection($location)"/>
</xsl:variable>
<xsl:for-each select="collection($location)">
<xsl:message>
<xsl:value-of select="./count(key('figure','all'))"/>
</xsl:message>
</xsl:for-each>
这总是给我 0 我什至不确定在这里使用密钥是否是正确的方法
tldr: 如何跨多个文档枚举 xslt 中的图像?
*编辑,因为我认为这有点不清楚: 我有多个由根 xml 导入的 xml 输入, 它们都可以包含图像 我有一个最终输出文件,需要连续枚举所有图像并能够引用它们
【问题讨论】:
-
“但我无法让它工作。”展示您的尝试,以便我们可以修复它,而不是从头开始。
-
@michael.hor257k 感谢您花时间添加一些上下文