Closed jiti1000 closed 8 years ago
@jiti1000 Hi,针对这个问题,有两种办法。
方法一(推荐):
修改xpath为//a/text()
let elements = JiDocument.xPath("//a/text()")?.first?.content
这样,只有a
里面的文字会被拿出来,span
里的东西就被忽略了。
方法二:
可以更改JiNode的keepTextNode
属性为true
JiDocument?.rootNode?.keepTextNode = true
let elements = JiDocument.xPath("//a/text()")?.first!
print(eles?.children[1].content)
然后取到的a
节点会有两个子节点,一个是span
节点,另一个是text节点,也就是包含新闻
字符的节点。
默认情况下,keepTextNode
是false
的
再请教下,需要解析的 字符串中 "//a/text()" // 和 / 有什么区别?
@jiti1000 请参考这个 http://www.w3schools.com/xsl/xpath_syntax.asp
Thanks! 还发现一个使用的问题,不知道是bug还是我使用的问题。 html字符如下: 程序如下: JiDocument.xPath("//li/a")?.count let elements = JiDocument.xPath("//li/a")!
let a = elements[0].rawContent let b = elements[1].rawContent let c = elements[2].rawContent
let d = elements[0].xPath("//a/text()").first?.content let e = elements[1].xPath("//a/text()").first?.content let f = elements[2].xPath("//a/text()").first?.content
调试输出入下图:
我预想的是 d="勋章申请区" , e="CHH第二届机王争霸赛", f="大恶魔的Blog" 但是实际d,e,f 都 = "勋章申请区"
我暂时解决办法是把每个element先取rawcontent,然后再转JiDocument, 再xpath一次,感觉这样比较繁琐,帮忙看下是否有方便的办法,感谢
@jiti1000 你试试吧d,e,f 里的xpath改成./text()
看看?还是上面那个连接,.
是选取当前node的。
太感谢啦!
Hi, 晚上好, 在解析时,预想只解析本级别的content,有没有方便的实现办法, html字符串如下: 代码如下: let elements = JiDocument.xPath("//a")?.first?.content 调试输出如下:
问题:本次解析时,我只想得到 "新闻" 这个content,不希望下级的2267也解析出来。
新手,请多指教, 感谢!🙏