0
是否有可能编写一个模板规则,其中匹配属性使用前置兄弟运算符,排除某些类型的节点? 我试图解释我的自我。我有这样的XML输入文档:XSLT:如何计算前面的兄弟,排除某些节点类型?
<?xml version="1.0"?>
<graph>
<vertex name="A"/>
<edge name="AB" />
<tag name="tagA"/>
<vertex name="C"/>
<edge name="AB"/>
<vertex name="AA"/>
<edge name="AAD"/>
<vertex name="D"/>
<vertex name="AAA"/>
<tag name="tagE"/>
<vertex name="E"/>
</graph>
我想提取是vertex
其前同辈排除型标签的所有节点,是vertex
含A
焦炭name
。在这种情况下,我想要的输出是: <vertex name="E"/>
我不知道哪个template
规则我应该写,因为我知道如何设置的约束给定类型的第一前置兄弟:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="exsl">
<xsl:template match="vertex[preceding-sibling::vertex[1]
[self::vertex[contains(@name, 'A')]]]">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
我能写一个匹配节点的第一个preceding-sibling
,没有指定任何类型,但它不能帮助我在这种情况下。 这里的问题是我想告诉XSLT考虑所有前面的兄弟,但不是tag
。
我很抱歉,但这不是我正在寻找的,因为我想要的是前一个兄弟姐妹,除非这是一个“标签”。我编辑我的例子更清楚。即使其最前面的兄弟是“标签”,我仍然希望接收到作为输出的<顶点名称=“E”/>“。这是因为我想对最前面的兄弟不是“标签”设置约束。 – delca85
我已经对我的答案进行了编辑,将“标记”记录考虑在内。 –