c# - 通过其中的子节点值定位 XML 节点,并更改另一个值

标签 c# xml

三部分问题。

是否可以通过其中的子节点定位特定 XML 节点以检索父节点的其他子节点?示例:

<House>
    <Kitchen>
        <Appliance>
            <Name>Refrigerator</Name>
            <Brand>Maytag</Brand>
            <Model>F2039-39</Model>
        </Appliance>
        <Appliance>
            <Name>Toaster</Name>
            <Brand>Black and Decker</Brand>
            <Model>B8d-k30</Model>
        </Appliance>
    </Kitchen>
</House>

为此,我想通过搜索“冰箱”或“ toastr ”找到合适的设备节点,并从中检索品牌。

这个问题的第二部分是这样的:这是一种愚蠢的做法吗?在 Appliance 标签中使用属性会使这更容易吗?如果是这样,我该如何定位它?

至于第三部分,一旦我找到设备,我将如何着手更改该特定设备的型号?

最佳答案

使用 XLinq ,您可以相当自然地执行此查询:

// Given:
//   var xdoc = XDocument.Load(...);
//   string applianceName = "Toaster";

// Find the appliance node who has a sub-element <Name> matching the appliance
var app = xdoc.Root
              .Descendants("Appliance")
              .SingleOrDefault(e => (string)e.Element("Name") == applianceName);

// If we've found one and it matches, make a change
if (app != null)
{
    if (((string)app.Element("Model")).StartsWith("B8d-k30"))
    {
        app.Element("Model").Value = "B8d-k30 Mark II";
    }
}

xdoc.Save(@"output.xml"); // save changes back to the document

关于c# - 通过其中的子节点值定位 XML 节点,并更改另一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366409/

相关文章:

java - 将 JAXB 与包含许多相同元素的 XML 文件一起使用

c# - 最近有没有在 ScrollView 中移动 map (xamarin.forms.maps)的解决方案?

c# - 如何广播HTTP请求?

php - 通过php将xml数据插入mysql数据库

sql-server - 在 SQL Server 中将图像类型数据转换为 XML/纯文本

java - Java如何通过迭代器迭代XML文件?

c# - 结合 foreach 和 linq

c# - “查询值的数量和目标字段不一样。”

C# 将 reflection.propertyinfo 转换为 Generic.List<>

java - 使用自定义 xml 协议(protocol)实现客户端,无需定义或模式