gpt4 book ai didi

C# 使用 XPATH 选择具有已知值的特定元素,然后删除

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:13 25 4
gpt4 key购买 nike

我是 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 方法中,但出现“表达式必须计算为节点集”的错误。这让我觉得当我使用“and”时我正在评估一个 bool 值。

通过循环执行此操作的更好方法是选择第一个元素并循环直到第二个元素匹配吗?正如我之前所说,我对 C# 中的 xpath/xml 表达式没有太多经验,也许有更好的方法。如果有帮助,我正在使用 Windows 窗体和 .net 4.0,在这种形式中,端口值将填充详细 View 中的两列 ListView 。

最佳答案

您需要在端口节点上“和”2 个条件,例如:

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

在您的情况下,您正在执行两个集合的并集,其中 Local=19 和另一个集合 Remote=21。

关于C# 使用 XPATH 选择具有已知值的特定元素,然后删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com