如何使用XPath訪問XML文檔中的註釋?使用XPath訪問XML中的註釋
例如:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
我想 「這裏有些評論」 訪問。
謝謝...
編輯:我使用MSXML DOM ActiveX和命令評論()似乎是失敗......任何想法,爲什麼?
如何使用XPath訪問XML文檔中的註釋?使用XPath訪問XML中的註釋
例如:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
我想 「這裏有些評論」 訪問。
謝謝...
編輯:我使用MSXML DOM ActiveX和命令評論()似乎是失敗......任何想法,爲什麼?
隨着路徑
/foo/bar/comment()
您可以選擇在/富/酒吧元素的所有意見。當然,可能取決於你選擇的語言。但通常這是你如何做到的。例如
使用註釋()函數: -
/table/length/following::comment()[1]
選擇下面的長度元件的第一評論。
編輯
馬諾在問這個答案爲什麼這不是在MSXML工作的評論。原因將是你使用的是MSXML3。默認情況下,MSXML3不使用XPath作爲其選擇語言,它默認使用較早的較弱語言(XSL模式)。您需要通過DOMDocument的setProperty方法將XPath設置爲選擇語言。 E.g(在JScript): -
var dom = new ActiveXObject("MSXML2.DOMDocument.3.0");
dom.setProperty("SelectionLanguage", "XPath");
現在全XPath語言會在你的查詢工作(注意一個重大更改是索引謂詞是基於XPath中1,而他們基於XSL模式爲0)。
也許這coud幫助, 此示例刪除評論
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
node.ParentNode.RemoveChild(node);
從這裏link text
基於業務方案的意見,發佈答案(和我的好奇,爲什麼這個簡單的東西是行不通的湊近),這裏是我的建議:
使用@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"
注:
一個。您的MSXML版本可能會有所不同。請適當使用。
b。絕對不推薦這種代碼,因爲它只適用於IE。但是,由於這是你明確聲明的要求,所以我使用了ActiveXObject。
c。您在評論中沒有提到在建議的XPath表達式中失敗的內容。我的猜測是,您不查詢檢索節點的text
屬性。請記住,SelectSingleNode始終返回IXmlNode
,您需要查詢其data
或text
屬性。
我正在使用MSXML DOM ActiveX,並且此命令似乎失敗了......任何想法爲什麼? – Manoj 2009-04-24 07:11:02
不,我不知道爲什麼。從上次使用MSXML庫開始已經過去7年了... – 2009-04-24 07:28:26
確定您的xpath根目錄是否正常?嘗試「//評論()」以確保。 – annakata 2009-04-24 07:56:48