2016-11-25 107 views
0
<main> 
    <root> 
    <SubRoot> 
    <type>R</type> 
    <mand>N</mand> 
    <Section>B</Section> 
    </SubRoot> 
    <SubRoot> 
    <type>P</type> 
    <mand>Y</mand> 
    <Section>A</Section> 
    </SubRoot> 
    </root> 
</main> 

我有上面的XML文件在这个文件我怎么能确定型R或任何其他元素属于哪个节点,在这里它是在第一子根节点。如何确定哪些元素属于哪个节点在XSL

在一个xsl文件中,我打电话给一个模板,如果部分的值为A,并且此部分在第二个子根节点中,如下所示 现在我想从when condition.How中的第二个子根节点访问其他值我可以那样做吗?

<xsl:choose> 
    <xsl:when test="(/main/root/SubRoot[Section = 'A'])"> 
    //Call some template 
    </xsl:when> 
    <xsl:otherwise> 
    //some template 
    </xsl:otherwise> 
</xsl:choose> 

我需要动态的XSL.Because验证它,我不知道在运行时有多少节点将为XML获取生成。 如果Section元素的值为A,那么它的内部第二个SubRoot节点。在此基础上,如何从第二个SubRoot Node访问其他元素的值。还请帮助使用建议的方法告诉我性能问题。

任何想法建议必须赞赏。

回答

0

在你的榜样,你不是测试的东西是否与A节一子根,但你正在测试用一节一子根是否存在,这是一个巨大的差异。

我猜你需要的是像parent::SubRoot[Section/text() = 'A']这将考验直接父标签是否具有与文本A.

或者,也许像ancestor::SubRoot[Section/text() = 'A']这将考验是否有父母,great-一节一子根父母,和那么在标签是有文字A的第一个子根

或者,也许像ancestor-or-self::SubRoot[Section/text() = 'A']将测试是否节点本身或任何父,伟大的父母,和那么号牌一个具有文本A部分的SubRoot。

+0

我将使用parent :: SubRoot [Section/text() ='A']或父母将是我的父节点的名称。当我使用父节点名称而不是父母它给我错误“非法轴名称”。 – Zia

+0

正如错误所述,在::之前是一个轴名称,并且这些是已定义的。父母表示父节点。如果您想了解更多关于该主题的内容,请阅读一些XSL文件。 :-) – Vampire

+0

我换成/主/根目录的父节点,当时我得到的error.Could请您提供一些好的链接,reference.Thanks提前 – Zia

相关问题