如何使用XPath在省略特定子项的情况下进行选择

本文关键字:情况下 选择 行选 XPath 何使用 | 更新日期: 2023-09-27 18:00:57

我有以下HTML:

<div id="main-body">
    <div id="answerswerform">
        //  ... a few children here i want
        <form id=mwanser">
        </form>
    </div>
</div>

我想要主体中的所有内容,除了表单标签中的内容。。。(也不要表单标签本身(。。。。

我尝试了很多XPath,但都没有成功。

我正在使用C#和HTMLAgilityPack,也许有一种方法可以导航到孩子并将其删除?对我来说,第一个选项也必须是XPath。

如何使用XPath在省略特定子项的情况下进行选择

我想我已经用这个答案实现了这一点:

如何使用xslt和样式表以及xsltproc从xml中删除元素?

这是使用普通XSL完成的,所以我不知道它是否对HTMLAgilityPack有帮助。

这是我使用的XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="form"/>
</xsl:stylesheet>

编辑:刚刚快速查看了HtmlAgilityPack代码,发现这个应该有效:

HtmlAgilityPack.HtmlNode node;
node = htmldoc.DocumentNode.SelectSingleNode("//form");
node.ParentNode.RemoveChild(node, false);

但由于某种原因,它只删除了开头的标签。

使用XPath,如果您选择一个节点,您将获得该节点及其每个子节点。您可以直接选择子节点,但不选择不需要的节点将您的样本作为测试,您可以写道:

"/*/*/*[not(self::form)]"
相关文章: