XPathを使用してXMLドキュメント内のコメントにアクセスする方法
例えば:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
「コメントはこちら」にアクセスしたい。
ありがとう...
編集:私はMSXML DOM ActiveXを使用していますが、コマンドcomment()が失敗しているようです...なぜだと思いますか?
パスで
/foo/bar/comment()
/ foo/bar要素のすべてのコメントを選択できます。もちろん、選択した言語によって異なります。しかし、一般的にはこれがあなたのやり方です。
たとえば、comment()関数を使用します。
/table/length/following::comment()[1]
長さ要素に続く最初のコメントを選択します。
編集
Manojはこの回答に対するコメントで、なぜこれがMSXMLで機能しないのかを尋ねます。その理由は、MSXML3を使用しているためです。デフォルトでは、MSXML3は選択言語としてXPathを使用しません。デフォルトでは、以前の非常に弱い言語(XSLパターン)に設定されています。 DOMDocumentのsetPropertyメソッドを使用して、XPathを選択言語として設定する必要があります。例(JScript):-
var dom = new ActiveXObject("MSXML2.DOMDocument.3.0");
dom.setProperty("SelectionLanguage", "XPath");
これで、完全なXPath言語がクエリで機能します(1つの重大な変更は、インデクサー述部がXPathに基づく1であるのに対し、XSLパターンでは0であったことに注意してください)。
投稿された回答に対するOPのコメント(およびこの単純なことが機能しない理由についての私の好奇心)に基づいて、以下が私の提案です。
@ Anthony によって提案されたXPath式を使用して、次のJS関数でコメントノードを正常にロードすることができました。
function SelectComment(s)
{
var xDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
if (xDoc)
{
xDoc.loadXML(s);
var selNode = xDoc.selectSingleNode("/table/length/following::comment()[1]");
if (selNode != null)
return selNode.text;
else
return "";
}
}
呼び出し例:
SelectComment("<table><length> 12</length><!--Some comment here--></table>");
出力:
"Some comment here"
注:
a。 MSXMLのバージョンは異なる場合があります。適宜ご利用ください。
b。この種類のコードはIEでのみ機能するため、お勧めできません。ただし、これは明示的に述べられた要件であるため、ActiveXObjectを使用しました。
c。提案されたXPath式で何が失敗するかをコメントで言及していません。私の推測では、取得したノードのtext
プロパティをクエリしていません。 SelectSingleNodeは常にIXmlNode
を返し、そのdata
またはtext
プロパティをクエリする必要があることに注意してください。
多分これは助けになるかもしれません、このサンプルはコメントを削除します
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
node.ParentNode.RemoveChild(node);
ここから寄りかかった リンクテキスト