我在使用Xpath时没有<script>
或<script ... />
获取所有html标签时遇到了一些问题。
例如,在HTML代码的这一部分中,我想删除:
<script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=fr"/>
代码
<li><!-- Search Google -->
<center>
<form action="http://www.google.fr/cse" id="cse-search-box" target="_blank">
<div>
<input type="hidden" name="cx" value="partner-pub-0959382714089534:mw3ssl65jk1"/>
<input type="hidden" name="ie" value="ISO-8859-1"/>
<input type="text" name="q" size="31"/>
<input type="submit" name="sa" value="Rechercher"/>
</div>
</form>
<script type="text/javascript"
src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=fr"/>
</center>
<!-- Search Google --></li>
我正在使用Web-Harvest生成一个xml文件,然后我必须删除一些特定标签。 我尝试了很多xpath(我正在使用html的主体):
//body//*[not(name() = 'script')]
//body//*[not(self::script)]
//body//*[not(starts-with(name(),'script'))]
//body//*[not(contains(name(),'script'))]
但它不起作用。
请注意//body//*[name() = 'script']
正在运作,但我希望相反......
你有什么想法吗?
或者更常见的是,如果您知道如何使用Xpath删除所有<script>
<script/>
标记,我也会感兴趣: - )
提前致谢。
答案 0 :(得分:3)
首先,XPath选择现有文档中的节点,但不会删除它们。您开始的路径//body//*
选择body
元素的所有子元素和后代元素。即使您现在添加类似//body//*[not(self::script)]
的谓词,该路径仍会选择li
和center
元素之类的元素,这些元素本身不是script
元素,但包含{{1}元素。因此,script
是不选择任何非//body//*[not(self::script)]
元素的正确方法,但如果您想要移除script
元素的原始center
元素,则无效。这不是纯XPath可以为您做的事情,您需要转移到XSLT来转换文档,这样就可以删除任何script
元素。
答案 1 :(得分:3)
XPath只是XML文档的查询语言,因此它无法以任何方式改变正在查询的XML文档。
生成与初始XML文档不同的新XML文档的最方便方法是使用XSLT。
这个简短而简单的XSLT转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="script"/>
</xsl:stylesheet>
应用于提供的XML文档时:
<li>
<!-- Search Google -->
<center>
<form action="http://www.google.fr/cse"
id="cse-search-box" target="_blank">
<div>
<input type="hidden" name="cx"
value="partner-pub-0959382714089534:mw3ssl65jk1"/>
<input type="hidden" name="ie" value="ISO-8859-1"/>
<input type="text" name="q" size="31"/>
<input type="submit" name="sa" value="Rechercher"/>
</div>
</form>
<script type="text/javascript"
src="http://www.google.com/coop/cse/brand?form=cse-search-box&lang=fr"/>
</center>
<!-- Search Google -->
</li>
生成想要的正确结果:
<li><!-- Search Google -->
<center>
<form action="http://www.google.fr/cse" id="cse-search-box" target="_blank">
<div>
<input type="hidden" name="cx" value="partner-pub-0959382714089534:mw3ssl65jk1"/>
<input type="hidden" name="ie" value="ISO-8859-1"/>
<input type="text" name="q" size="31"/>
<input type="submit" name="sa" value="Rechercher"/>
</div>
</form>
</center><!-- Search Google -->
</li>