0

HTML Agility Packを使用して、XPATHを使用してXHTMLのノードを選択しようとしています。以下の各pタグにリストした子を選択したいのですが、孫は選択しません。

<strike></strike>
<em></em>
<u></u>
<strong></strong>
<sub></sub>
<sup></sup>

つまり、 ABを探していますが、どちらのノードの2番目のレベルも探していません。一方、AノードまたはBノードはセット内のどこにでもあります。注:AまたはBは、上記のいずれかになります。

ノードツリーを表すAおよびB画像

次のXHTMLがある場合:

<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
<title></title>
</head>
<body>
    <p><strike>element 1</strike> and <strike><em>element 2</em></strike></p>
    <p><strike>element 3</strike></p>
    <p><strike>element 4</strike></p>
</body>
</html>

上記の各pタグでリストした子を選択できる場合、次のノードのコレクションが返されます:ストライク、ストライク、ストライク、ストライク。各ストライキの子供たちへのアクセスを私に与えます。

<strike>element 1</strike> and <strike><em>element 2</em></strike>

XPATHの最初はsub [1](つまりストライクのインスタンス)を意味し、無視された2番目はsub [2](つまりストライクのインスタンス)を意味します。それが私のクエリが行っていることなので、これは理にかなっています。次に、XPATHが<em>タグなどを取得します...

私がこれを説明できるもう一つの方法は、子供ではなく//a|//b|//c|//d|//e私が欲しいと言うことです。これは可能ですか?

結局、これは私がどのように私の解決策にたどり着くことができるかについて私を混乱させます。

XPATHに関する回答をMSDNで探していました。

さらに調査や情報が必要な場合はお知らせください。提供します。

4

2 に答える 2

1

を使用します//

これにより、どのレベルであっても、ドキュメント全体で一致するすべてのノードが選択されます。の直下にあるときにのみ特定のノードを選択する場合はp、 を実行します//p/strike。これは任意のノードに一致しますが、直下のノードpのみに一致します。strikep

于 2012-12-12T20:47:08.273 に答える
0

Frank van Puffelenと職場の友人のアドバイスを利用して、良い解決策を思いつきました。

この問題は 2 つのステップで解決されます。

まず、必要なノードをすべて選択しますSelectNodes("//strike|//em|//u|//strong|//sub|//sup")

次に、for ループを使用して、選択したすべてのノードを調べ、ノードの親を調べます。親が次のいずれかである場合は、strike、em、u、strong、sub、および sup を削除し、それを削除します。継続する。

みんな、ありがとう。

于 2012-12-14T14:38:58.480 に答える