繁体   English   中英

Specflow C# - 加载/编辑/保存 xml 文件

[英]Specflow C# - load/edit/save xml file

我使用 Visual Studio 2019,我想加载、编辑和保存 xml 文件。

xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<Firstdelivery25 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.acm.nl/Operations/2018/09">
    <Firstdelivery>
        <MessageId xmlns="http://www.acm.nl/DataModel/2018/09">
            <Source>ABC</Source>
        </MessageId>
    </Firstdelivery>
</Firstdelivery25>

Visual Studio 中的代码:

using System.Linq;
using System.Xml.Linq;
using System.Xml;
using TechTalk.SpecFlow;
XDocument xdoc = XDocument.Load(@"C:\\XML files\\25.xml");
            var element = xdoc.Elements("Source").FirstOrDefault();
            if (element != null)
            {
                element.Value = "DEF";
            }

            xdoc.Save(@"C:\\VB_25.xml");

当我执行此操作时,测试成功通过。 但是,当我打开新创建的 VB_25.xml 文件时,旧值仍然存在。

任何帮助/建议/提示将不胜感激。

var element = xdoc.Elements("Source").FirstOrDefault();

鉴于您提供的 XML elements将始终为 null ,因此您对 XML 什么也不做,这就是结果看起来像输入的原因。

原因 1: Elements()仅查找直接子级,而<Source>不是您文档中的直接子级。

请参阅https://docs.microsoft.com/en-us/dotnet/api/system.xml.linq.xcontainer.elements?

原因 2: <Source>标记的命名空间与文档本身不同,因此查询在错误的命名空间中查找。

解决方案:

XNamespace ns = "http://www.acm.nl/DataModel/2018/09";
var element = xdoc.Descendants(ns + "Source").FirstOrDefault();

请参阅https://docs.microsoft.com/en-us/dotnet/api/system.xml.linq.xcontainer.descendants包括孩子?

如果您希望节点存在,我还建议使用First()而不是FirstOrDefault() 这样,您将获得一个异常,该异常会向您显示问题的原因。

您可以尝试使用 XPathNavigator 修改 XML 数据

这是一个简单的演示,您可以参考。

http://www.acm.nl/DataModel/2018/09MessageIdxmlns

XmlDocument document = new XmlDocument();
document.Load("test.xml");
XPathNavigator navigator = document.CreateNavigator();

XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("id", "http://www.acm.nl/DataModel/2018/09");

foreach (XPathNavigator nav in navigator.Select("//id:Source", manager))
{
    nav.SetValue("Tessssssst");
}

document.Save(@"new.xml");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM