【问题标题】:xpath and xslt ... what is child::para?xpath 和 xslt ... 什么是 child::para?
【发布时间】:2014-04-08 00:54:46
【问题描述】:

我是非常非常 XML、HTML 和 XSLT 的新手。

我正在学习 XSLT 课程的笔记,并且在 xpath 上有一个块。笔记说: 这些是使用未缩写语法的位置路径的一些示例: - 孩子::para - 孩子::*

还有大约 30 个。我不明白这是在说什么。我会直接输入“child::para”,就像这些关键词一样,还是将我拥有的内容作为标签放入我的 XML 文档中?

假设我有这个简单的 xml 文档:

<school>
 <university>
   <western>purple</western>
   <toronto>blue</toronto>
 </university>
 <highschool>
   <northern>red</norther>
   <scits>blue</scits>
 </highschool>
</school>

例如,我将如何选择“紫色”?我会说 school::child::para 吗?我真的不知道如何使用 xpath 来获取特定的节点/标签/元素...谢谢!

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    我对 XML、HTML 和 XSLT 非常陌生。

    我正在为一个关于 XSLT 的课程学习笔记,并且在 xpath 上有一个块。

    你得到的笔记显然是粗略的。我想知道问 SO 是否真的是你最好的学习策略。网上有很多教程,也有很多书希望在你的大学图书馆里。我认为你应该多读书,只有在遇到困难时才来这里。

    【讨论】:

      【解决方案2】:

      重要的是要知道 XPath 是一种查询语言,它仍然需要一些东西来运行它,比如 XML 引擎,非常类似于 SQL(S结构化 Query Language) 需要 SQL 服务器才能运行。

      至于您的问题,可以构造任意数量的查询以从该文档中提取"purple"

      就这么简单:

      /school/university/western/text()
      

      但是,这只有在我知道这是确切路径的情况下才有效。如果我认为所有western 节点都是“紫色”的,那么我可以在文档中的任何位置找到所有这些节点。

      //western/text()
      

      但是,如果我只想要大学呢:

      //university/western/text()
      

      或者我可能想知道什么是“紫色”分区 - 请注意,此查询返回“紫色”的父节点而不是文本本身。:

      //university//*[text()="purple"]
      

      :: 语法用于使用XPath axes(轴的复数,而不是轴)。 child::para 表示在当前上下文节点找到para 元素的子元素。在您的文档中 child::para 将一无所获,因为没有 para 元素。 school::child::para 也不会工作,因为它的布局无效并且school:: 不是有效的 XPath 轴。

      这张来自 Umbraco 的维恩图很好地说明了轴的工作原理:

      【讨论】:

      • 好的,非常感谢!所以你从来没有真正输入“::”,你总是使用“/”,就像你在写一条路径一样? (这个名字对我来说很有意义......)
      • @jcam77 这取决于你在做什么类型的查询,有时你使用轴,有时不。听起来可能值得再次复习您的课堂笔记,或许还可以在线阅读更多内容。
      • "child::para 表示在当前上下文节点查找 para 元素的子元素。" 不太对。
      【解决方案3】:

      你说的很对:child::para 不是一个很好的例子,除非你正在查看一个看起来像这样的实际 XML 文档:

      <book>
          <chapter>
              <para>Lorem ipsum.</para>
              <para>Nam interdum.</para>
              <para>Cum sociis natoque.</para>
         </chapter>
         <chapter>
              <para>Ut molestie quam.</para>
              <para>Duis dapibus.</para>
         </chapter>
      </book>
      

      只有这样child 是一个(并且它的名称不依赖于当前处理的文档)并且para 是一个节点在已处理的 XML 中存在(或预期存在)。

      IOW,通用语法是:

      axis::node

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多