【发布时间】:2011-03-25 11:06:05
【问题描述】:
如何选择以下节点的字符串内容:
<span class="url">
word
<b class=" ">test</b>
</span>
<span class="url">
word
<b class=" ">test2</b>
more words
</span>
我尝试了一些方法
//span/text()
没有得到粗体标签
//span/string(.)
无效
string(//span)
只选择 1 个节点
我在 php 中使用 simple_xml,我认为唯一的其他选择是使用 //span 返回:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => url
)
[b] => test
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => url
)
[b] => test2
)
)
*请注意,它还会从第二个跨度中删除“更多单词”文本。
所以我想我可以如何使用 php 将数组中的项目展平? Xpath 是首选,但任何其他想法也会有所帮助。
【问题讨论】:
-
也尝试使用 //span//text() 但这会将文本拆分为 simple_xml 中的单独元素
-
你需要它带还是不带实际的 b 标签? (您确实需要我收集的内容,但是标签字符串呢)。与
DOM相比,您对SimpleXML的投入程度如何? -
我宁愿没有 b 标签,但如果它们是返回的,它们很容易删除。主要目标是为每个跨度返回 1 个字符串。我不完全理解简单的 xml 对象和我猜的 dom 对象之间的区别。我创建了一个 dom 对象,将 html 加载到其中,然后在 simple_xml 中导入 dom 对象。然后我可以对对象执行 xpath 。返回的是一组简单的 xml 对象(我认为)。这就是我所做的: $html = new DOMDocument(); @$html->loadHTMLFile($url); $xml = simplexml_import_dom($html); //查找所有链接 $result = $xml->xpath("//span");
-
添加了一个简单的 DOM 示例作为答案。
标签: php xml xslt xpath simplexml