有人知道在使用XPath提取数据时如何保持文本格式吗?
我正在提取所有的区块
<div class="info"> <h5>title</h5> text <a href="somelink">anchor</a> </div>
从一个页面。问题是当我访问nodeValue时,我只能获得纯文本。如何在代码中捕获包括格式化在内的内容,即h5和一个蒸馏器?
提前谢谢。我在谷歌上搜索了所有能想到的组合,但没有找到。
发布于 2009-01-07 13:37:30
如果您将其作为DomElement $element作为DomDocument $dom的一部分,那么您将希望执行以下操作:
$string = $dom->saveXml($element);元素的NodeValue实际上是文本值,而不是结构化的XML。
发布于 2009-01-08 09:42:26
我想补充一下Ciaran McNulty的答案
您可以在SimpleXml中执行相同的操作,如:
$simplexml->node->asXml(); // saveXml() is now an alias并在引用的基础上展开
元素的NodeValue实际上是文本值,而不是结构化的。
您可以按如下方式考虑您的节点:
<div class="info">
<__toString()> </__toString()>
<h5>title</h5>
<__toString()> text </__toString()>
<a href="somelink">anchor</a>
<__toString()> </__toString()>
</div>其中对$element->nodeValue的调用类似于对$element->__toString()的调用,它只会获取__toString()元素。我创建的虚构__toString()被正式定义为XML_TEXT_NODE。
发布于 2009-01-10 21:15:00
旨在嵌入到另一种语言中(如DOM、XSLT、XQuery等)并且不能用于独立的。最初的问题没有具体说明什么是所需的嵌入。
当XPath嵌入到 中时,下面的是一个非常简单而简短的解决方案。
此转换
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="div[@class='info']">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>在此xml文档上应用时的
<html>
<body>
<div class="info">
<h1>title1</h1> text1
<a href="somelink1">anchor1</a>
</div>
Something else here
<div class="info">
<h2>title2</h2> text2
<a href="somelink2">anchor2</a>
</div>
Something else here
<div class="info">
<h3>title3</h3> text3
<a href="somelink3">anchor3</a>
</div>
</body>
</html>生成所需的结果
<div class="info">
<h1>title1</h1> text1
<a href="somelink1">anchor1</a>
</div>
Something else here
<div class="info">
<h2>title2</h2> text2
<a href="somelink2">anchor2</a>
</div>
Something else here
<div class="info">
<h3>title3</h3> text3
<a href="somelink3">anchor3</a>
</div>https://stackoverflow.com/questions/420304
复制相似问题