xpath和xslt ...什么是child :: para?

时间:2014-04-08 00:54:46

标签: xml xslt xpath

非常非常 XML,HTML和XSLT。

我正在研究关于XSLT的类的注释,并且xpath上有一个块。笔记说: 以下是使用未缩写语法的位置路径的一些示例: - 孩子::段 - 孩子:: *

还有大约30多个。我不明白这是在说什么。我会输入" child :: para",就像这些关键词,还是我把我的标签作为标签放在我的XML文档中?

我们说我有这个简单的xml文档:

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

我如何选择&#34; purple&#34;例如?我会说school :: child :: para吗?我真的不知道如何使用xpath来获取特定的节点/标签/元素......谢谢!

3 个答案:

答案 0 :(得分:2)

  

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

     

我正在学习关于XSLT的类的注释,并且在xpath上有一个块。

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

答案 1 :(得分:1)

重要的是要知道XPath是一种仍然需要运行它的查询语言,比如XML引擎,类似于SQL( S 被剔除 Q uery L anguage)需要运行SQL服务器。

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

简单如下:

/school/university/western/text()

然而,只有当我知道这是确切的路径时,这才有效。如果我认为所有western节点都是“紫色”,我可以在文档中找到所有这些节点。

//western/text()

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

//university/western/text()

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

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

::语法用于使用XPath axes(多个轴,而不是ax)。 child::para表示在当前上下文节点中查找para元素的子元素。在您的文档中child::para将找不到任何内容,因为没有para元素。 school::child::para也无法正常工作,school::也不是有效的XPath轴。

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

Umbraco / Crane venn diagram of Xpath axes

答案 2 :(得分:1)

你是对的: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节点< / strong>在处理过的XML中找到(或预期)。

IOW,通用语法是:

axis::node