簡體   English   中英

C#使用XPATH選擇具有已知值的特定元素,然后刪除

[英]C# Using XPATH to select specific element with known values, then delete

我是C#中xpath的新手,我試圖選擇一個具有兩個特定值的元素。 這就是XML格式的樣子

<?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表達式切換為'和'而不是'|' 在SelectSingleNode方法中但是“表達式必須評估為節點集”時出錯。 當我使用'和'時,這讓我覺得我正在評估一個布爾值。

是一個更好的方法來做一個循環,其中選擇第一個元素和循環,直到第二個匹配? 正如我之前所說,我對C#中的xpath / xml表達式沒有多少經驗,也許還有更好的方法。 如果它有助於我使用Windows窗體和.net 4.0,則在此窗體中,端口值將在詳細視圖中填充兩列列表視圖。

您需要在端口節點上“和”2條件,如:

"/Manager/SSH/Tunnels/Port[Local=" + _local + " and  Remote=" + _remote + "]"

在你的情況下,你正在做2組的聯合,其中Local = 19,另一組是Remote = 21。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM