2014-04-29 72 views
1

我正在嘗試使用XPath查找具有特定值的屬性的節點。 下面的代碼適用於普通字符串,但在出現轉義字符時會失敗,如&或'。XPath查找非法字符的屬性

string query = "question & answer"; 
query = query.replace("&", "&"); 

string nodePath = string.Format("/QUESTIONS/QUESTION[@text='{0}']", query); 

XmlNode node = xmlDoc.SelectSingleNode(nodePath); 

有沒有辦法找到包含轉義字符的值的屬性?

+0

執行'/ QUESTIONS/QUESTION [@ text ='question & answer']'應該可以很好的找到一個文本屬性等於'question & answer'的問題元素。源XML也必須具有這種編碼,否則它將不是格式良好的XML – dirkk

回答

1

乾脆不要做替換特殊字符:

string query = "question & answer"; 
string nodePath = string.Format("/QUESTIONS/QUESTION[@text='{0}']", query); 
XmlNode node = xmlDoc.SelectSingleNode(nodePath); 

如果您需要尋找一些與單引號字符,然後使用屬性文本雙引號這將匹配

<QUESTION text="question &amp; answer"/> 

string query = "question's answer"; 
string nodePath = string.Format("/QUESTIONS/QUESTION[@text=\"{0}\"]", query); 

匹配

<QUESTION text='question&apos;s answer'/> 

如果文本內有單引號,只需使用雙引號來表示文本屬性值。

+0

謝謝,這適用於&,但如果我嘗試相同的'我收到一個錯誤:/ QUESTIONS/QUESTION [@ text ='question's answer ']'有一個無效標記 – glboothby

+0

@glboothby等待,我會檢查 –