【问题标题】:How to identify which element belongs to which node in XSL如何识别 XSL 中哪个元素属于哪个节点
【发布时间】:2017-04-09 19:26:26
【问题描述】:
 <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 或任何其他元素属于哪个节点,这里它在第一个 SubRoot 节点中。

在 xsl 文件中,如果部分的值为 A 并且此部分位于第二个 SubRoot 节点中,则我正在调用模板,如下所示, 现在我想从 when 条件中的第二个 SubRoot 节点访问其他值。我该怎么做?

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

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

任何想法建议都必须受到赞赏。

【问题讨论】:

    标签: java xml xslt


    【解决方案1】:

    在您的示例中,您不是在测试 A 部分的子根中是否存在某些东西,而是在测试 A 部分的子根是否存在,这是一个巨大的差异。

    我猜你需要的是parent::SubRoot[Section/text() = 'A'] 之类的东西,它将测试直接父标签是否是具有带有文本 A 的 Section 的 SubRoot。

    或者像ancestor::SubRoot[Section/text() = 'A'] 这样的东西,它会测试是否有任何父标签、大父标签等标签是具有带有文本 A 的 Section 的 SubRoot。

    或者像ancestor-or-self::SubRoot[Section/text() = 'A'] 这样的东西,它将测试节点本身或任何父、伟大父等标记是否是具有文本 A 的部分的子根。

    【讨论】:

    • 我将使用 parent::SubRoot[Section/text() = 'A'] 还是 parent 将是我的父节点的名称。当我使用父节点名称而不是父节点时,它给了我错误“非法轴名称”。
    • 正如错误所说,在 :: 之前是一个轴名称并且已经定义了这些名称。 parent 表示父节点。如果您想了解有关该主题的更多信息,请阅读一些 XSL 文档。 :-)
    • 当时我用 /main/root 替换了父节点我得到了那个错误。请你给我一些好的链接以供参考。提前谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2019-05-14
    • 2016-12-19
    • 2012-07-25
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多