3
我是C#中xpath的新手,我嘗試選擇具有兩個特定值的元素。這是XML格式的樣子C#使用XPATH選擇具有已知值的特定元素,然後刪除
<?xml version="1.0" encoding="utf-8"?>
<Manager>
<SSH>
<Tunnels>
<Port>
<Local>443</Local>
<Remote>443</Remote>
</Port>
<Port>
<Local>5432</Local>
<Remote>5432</Remote>
</Port>
<Port>
<Local>19</Local>
<Remote>21</Remote>
</Port>
<Port>
<Local>19</Local>
<Remote>22</Remote>
</Port>
</Tunnels>
</SSH>
</Manager>
我試圖選擇一個「端口」是有從以前的表單中的值,這樣我可以刪除XML特定條目。這是我使用的代碼:
//remove children from selected
XmlNode _xmlTunnel = _xml.SelectSingleNode("/Manager/SSH/Tunnels/Port[Local=" + _local + "] | /Manager/SSH/Tunnels/Port[Remote=" + _remote + "]");
MessageBox.Show("Local " + sshList.SelectedItems[0].Text + " Remote " + sshList.SelectedItems[0].SubItems[1].Text +"\n\n" + _xmlTunnel.InnerText);
_xmlTunnel.RemoveAll();
//remove all empties
XmlNodeList emptyElements = _xml.SelectNodes(@"//*[not(node())]");
for (int i = emptyElements.Count -1; i >= 0; i--) {
emptyElements[ i ].ParentNode.RemoveChild(emptyElements[ i ]); }
此代碼工作正常,直到我有一個相同的本地價值兩個端口。它始終選擇它所涉及的第一個元素(即Local即= 19,Remote = 21,即使您嘗試選擇Local = 19且Remote = 22的節點)。我嘗試將xpath表達式切換爲'and'而不是'|'在SelectSingleNode方法中,但用「Expression必須評估爲節點集」出錯。這讓我認爲我在使用'和'時正在評估布爾值。
更好的方法是通過循環來做到這一點,其中選擇第一個元素和循環,直到第二個匹配?正如我之前所說的,我對C#中的xpath/xml表達式沒有多少經驗,也許有更好的方法。如果它有幫助,我正在使用windows窗體和.net 4.0,在這種形式下,端口值在詳細視圖中填充兩列列表視圖。
完美的作品,我希望我親近,謝謝! – FeatherKing 2011-05-10 04:15:04