GVKun编程网logo

什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)

16

在这篇文章中,我们将带领您了解什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)的全貌,同时,我们还将为您介绍有关ClojureXML解析、CSS中的id选择器

在这篇文章中,我们将带领您了解什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)的全貌,同时,我们还将为您介绍有关Clojure XML解析、CSS中的id选择器和class选择器简单介绍_html/css_WEB-ITnose、CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)、html – Nokogiri和Xpath:找到两个标签之间的所有文本的知识,以帮助您更好地理解这个主题。

本文目录一览:

什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)

什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)

我正在寻找一个相当于 Ruby中的Nokogiri的Clojure.具体来说,我希望能够使用CSS和XPath选择器遍历XML.

解决方法

首先要提醒一句:目前,没有本机Clojure lib可以正确处理XML命名空间.

要使用类似CSS的选择器来遍历和转换HTML和XML,那么它是Enlive(tutorial). Enlive支持的谓词集是开放的,因此您可以轻松扩展其选择器.

Clojure XML解析

Clojure XML解析

我找不到任何有关如何解析XML文档和访问元素的信息。

我发现了两种方法来解析xml文档

(clojure.zip/xml-zip (clojure.xml/parse file))

(parse-seq file)

但我似乎可以找到任何有关如何处理生成的结构的信息?

源文件是指zip-query.clj如何查询结果,但似乎也失踪了。

假设您有以下xml来解析您的文件:
<high-node>
   <low-node>my text</low-node>
</high-node>

你加载clojure.xml:

user=> (use 'clojure.xml)

当解析时,xml将具有以下结构:

{:tag :high-node,:attrs nil,:content [{:tag :low-node,:content ["my text"]}]}

然后可以对文件的内容进行seq以获取低节点的内容:

user=> (for [x (xml-seq 
              (parse (java.io.File. file)))
                 :when (= :low-node (:tag x))]
         (first (:content x)))

("my text")

同样,如果你想访问低节点信息的整个列表,你可以改变:当谓词为(=(:high-node(:tag x))):)

user=> (for [x (xml-seq 
              (parse (java.io.File. file)))
                 :when (= :high-node (:tag x))]
         (first (:content x)))

({:tag :low-node,:content ["my text"]})

这是因为关键字可以作为函数操作。见Questions about lists and other stuff in Clojure和Data Structures: Keywords

CSS中的id选择器和class选择器简单介绍_html/css_WEB-ITnose

CSS中的id选择器和class选择器简单介绍_html/css_WEB-ITnose





   
   



Hello World


Hello


this is a paragraph who is not affected by the style




CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)

CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)

本章给大家介绍css什么是id 和 class选择器?id 和 class选择器的用法(实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、id 选择器

id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。

HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义。

以下的样式规则应用于元素属性id="demo", id="para1":

立即学习“前端免费学习笔记(深入)”;

#demo{ width: 500px; height: 200px; margin: 50px auto; } 
#para1 { text-align:center; color:red; }
登录后复制

注意:ID属性不要以数字开头,数字开头的ID在 Mozilla/Firefox 浏览器中不起作用。

示例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>id 选择器</title>
		<style>
		     #demo{ width: 500px; height: 200px; margin: 50px auto; } 
                     #para1 { text-align:center; color:red; }
		</style>
	</head>
	<body>
		<div id="demo">
			<p id="para1">Hello World!</p>
			<p>这个段落不受该样式的影响。</p>
		</div>
	</body>
</html>
登录后复制

效果图:

1.jpg

二、class 选择器

class 选择器用于描述一组元素的样式,class 选择器有别于id选择器,class可以在多个元素中使用。

class 选择器在HTML中以class属性表示, 在 CSS 中,类选择器以一个点"."号显示:

在以下的例子中,所有拥有 center 类的 HTML 元素均为居中。

.center {text-align:center;}
登录后复制

示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>class 选择器/title> 
<style>
.center
{
    text-align:center;
}
</style>
</head>

<body>
<h1>标题居中</h1>
<p>段落居中。</p> 
</body>
</html>
登录后复制

效果图:

1.png

你也可以指定特定的HTML元素使用class。

在以下实例中, 所有的 p 元素使用让该元素的文本居中:

p.center {text-align:center;}
登录后复制

注意:类名的第一个字符不能使用数字!它无法在 Mozilla 或 Firefox 中起作用。

代码实例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>css教程</title> 
<style>
p.center
{
    text-align:center;
}
</style>
</head>

<body>
<h1>这个标题不受影响</h1>
<p>这个段落居中对齐。</p> 
</body>
</html>
登录后复制

效果图:

2.png

以上就是CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)的详细内容,更多请关注php中文网其它相关文章!

html – Nokogiri和Xpath:找到两个标签之间的所有文本

html – Nokogiri和Xpath:找到两个标签之间的所有文本

我不确定这是语法问题还是版本差异,但我似乎无法解决这个问题.我想从h2标签中取出(非关闭)td内的数据到h3标签.以下是HTML的外观.
<td valign="top" width="350">
    <br><h2>NameIWant</h2><br>
    <br>Town<br>

    PhoneNumber<br>
    <a href="mailto:emailIwant@Nowhere.com">emailIwant@Nowhere.com</a>
    <br>
    <a href="http://websiteIwant.com">websiteIwant.com</a>
    <br><br>    
    <br><img src="images/spacer.gif"/><br>

    <h3><b>I want to stop before this!</b></h3>
    Lorem Ipsum Yadda Yadda<br>
    <img src="images/spacer.gif" border="0" width="20" height="11" alt=""/><br>
    <td width="25">
        <img src="images/spacer.gif" border="0" width="20" height="8" alt=""/>
        <td valign="top" width="200"><img src="images/spacer.gif"/>
            <br>
            <br>

            <table cellspacing="0" cellpadding="0" border="0"/>205"&gt;<tr><td>
                <a href="http://dontneedthis.com">
                </a></td></tr><br>
            <table border="0" cellpadding="3" cellspacing="0" width="200">
            ...

< td valign>直到页面的最底部才关闭,我认为这可能是我遇到问题的原因.

我的Ruby代码看起来像:

require 'open-uri'
require 'nokogiri'

@doc = Nokogiri::XML(open("http://www.url.com"))

content = @doc.css('//td[valign="top"] [width="350"]')

name = content.xpath('//h2').text
puts name // Returns NameIwant

townNumberLinks = content.search('//following::h2')
puts content // Returns <h2> NameIWant </h2>

据我所知,遵循语法应该“在当前节点的结束标记之后选择文档中的所有内容”.如果我尝试使用前面的:

townNumberLinks = content.search('//preceding::h3')
// I get: <h3><b>I want to stop before this!</b></h3>

希望我明确表达了我想要做的事情.谢谢!

解决方法

这不是微不足道的.在您选择的节点(td)的上下文中,要获取两个元素之间的所有内容,您需要执行这两个集合的交集:

>集合A:第一个h3之前的所有节点:// h3 [1] / preceding :: node()
> Set B:第一个h2:// h2 [1] / following :: node()之后的所有节点

要执行交叉路口,您可以使用Kaysian method(Michael Kay之后,谁提出它).基本公式是:

A[count(.|B) = count(B)]

将它应用于您的集合,如上所定义,其中A = // h3 [1] / preceding :: node()和B = // h2 [1] / following :: node(),我们有:

//h3[1]/preceding::node()[ count( . | //h2[1]/following::node()) = count(//h2[1]/following::node()) ]

这将选择从第一个< br>开始的所有元素和文本节点.在< / h2>之后标记,到最后一个< br>之后的空白文本节点,就在下一个< h3>之前.标签.

您可以轻松选择h2和h3之间的文本节点,替换表达式中text()的node().这个将返回两个标头之间的所有文本节点(包括空格和换行符):

//h3[1]/preceding::text()[ count( . | //h2[1]/following::text()) = count(//h2[1]/following::text()) ]

关于什么是Nokogiri的clojure等价物(使用xpath和css选择器进行xml解析)的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Clojure XML解析、CSS中的id选择器和class选择器简单介绍_html/css_WEB-ITnose、CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)、html – Nokogiri和Xpath:找到两个标签之间的所有文本等相关知识的信息别忘了在本站进行查找喔。

本文标签: