0
我知道XSLT的基本知识,但是我有这个非常复杂的XML文档,需要从中检索一些元素。在for循环中有一个for循环,并在树节点中向上。 我已经做了基本的东西,但无法绕过更难的东西。 我不能在这里发布我需要改造,但这里的XML文件是我的问题的表示:XSLT:从每个循环的两个向上移动
<Z xmlns="blablabla" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<A>
<B>
<C>date</C>
<D>
<F>client 1 data</F>
<E>
<X>transaction 1</X>
</E>
<E>
<X>transaction 2</X>
</E>
</D>
<D>
<F>client 2 data</F>
<E>
<X>transaction 1</X>
</E>
</D>
</B>
</A>
</Z>
所以可能有许多标签在标签(每个)和许多标签在标签(所以每个都是另一个)。当我在标签内部并从那里检索数据时,我需要使用来自两个循环之外的标签的数据。我需要D * E部分,并且在每个部分中,我需要使用与来自和的数据无关的标记中的相同数据。
而在所有的每个标签都与和和我不知道如何使用xsl:模板匹配,所以我不必使用
<xsl:value-of select="z:A/z:B/z:C"/>
有一种方法只是定义一次的地方,然后只是使用<xsl:value-of select="z:C" />
?
这里是我的XSL文件,到目前为止,但遗憾的是它不工作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:z="blablabla">
<xsl:output method="text" encoding="utf-8" />
<xsl:template match="z:A/z:B">
<xsl:value-of select="/z:C"/>
<xsl:for-each select="/z:D">
<xsl:for-each select="/z:E">
should be repeated value from tag C in every section within those loops <xsl:value-of select="../../z:C"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
和输出可以是:(只是给大家展示一下我的部分的含义)
date : client 1 data -> transaction 1, transaction 2
date : client 2 data -> transaction 1
...
你会这么好心,并检查我的编辑1?我无法得到我真正的例子,工作woth你的解决方案... – doublemc
这似乎是一个单独的问题。答案是有内置的模板规则可以处理没有匹配模板的节点。匹配根元素或添加禁止文本的模板。 –
但是为什么它与你的例子一起工作?为什么不会输出B标记中的所有值,例如标记C中的日期?结构是一样的,不是吗? –
doublemc