【问题标题】:Trying to change a XML node with no success尝试更改 XML 节点但没有成功
【发布时间】:2015-05-20 06:42:58
【问题描述】:

我正在尝试从以下 .xml 文件中更改 model 属性的值。

<MTConnectDevices xmlns="urn:mtconnect.org:MTConnectDevices:1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mtconnect.org:MTConnectDevices:1.1 http://www.mtconnect.org/schemas/MTConnectDevices_1.1.xsd">
  <Header version="1.1" sender="Company MTConnect Instance" creationTime="2010-08-26T19:00:47-07:00" instanceId="2" bufferSize="131072" />
  <Devices>
    <Device name="XX" iso841Class="1" uuid="000" id="id1001">
      <Description manufacturer="name" serialNumber="Serial Number" model="UNDEFINED">
      </Description>

这是我尝试过的,但它不起作用,因为它没有改变 model 的值。

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(mypath);
        var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
        nsmgr.AddNamespace("ns", xmlDoc.DocumentElement.NamespaceURI);
        var node = xmlDoc.SelectSingleNode("/ns:MTConnectDevices/ns:Header/ns:Devices/ns:Device/ns:Description", nsmgr);
        node.Attributes["model"].Value = "changed";
        xmlDoc.Save(mypath);

谁能帮我解决这个问题?

【问题讨论】:

  • 它在什么方面不起作用?
  • 它没有改变值。
  • 您是否在调试器中检查了node 的状态,或者只是文件中的值没有被更新?将/MTConnectDevices 更改为//MTConnectDevices 有什么不同吗?
  • 在node.Attributes["model"].Value = "newvalue"; 我得到了NullReferenceException。这意味着它没有正确获取节点?
  • 您是否尝试更改 MTConnect 流本身的值?如果是这样,那就违背了 MTConnect 的目的。无论如何,如果您仍然对 MTConnect 感兴趣,我建议您关注 area51.stackexchange.com/proposals/80667/internet-of-things,以便有更好的地方发布有关 MTConnect 的问题。

标签: c# .net xml xmldocument


【解决方案1】:

您的 xml 包含命名空间,因此您必须在检索节点时使用它们。

可以这样做:

var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("ns", xmlDoc.DocumentElement.NamespaceURI);
var node = xmlDoc.SelectSingleNode("/ns:MTConnectDevices/ns:Devices/ns:Device/ns:Description", nsmgr);

【讨论】:

  • 当我尝试使用 node.Attributes["model"].Value = "newvalue"; 更改节点时,我得到一个 NullReferenceException 。这意味着它没有正确获取节点?
  • @Borja 这意味着无法通过指定路径找到节点(因此它为空)或找到节点,但它没有model 属性。你提供了相关的xml吗?我没有收到您提供的 xml 的任何异常(使用修改后的路径,包括 Header),并且模型属性正在更新。
  • 我知道问题出在哪里。它位于MTConnectDevices 属性的 URL 上:&lt;MTConnectDevices test="" xmlns="urn:mtconnect.org:MTConnectDevices:1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mtconnect.org:MTConnectDevices:1.1 http://www.mtconnect.org/schemas/MTConnectDevices_1.1.xsd"&gt; 测试,如果我删除 URL 并只保留 test 属性,一切正常,test 属性变化完美。 &lt;MTConnectDevices test="" &gt; 有什么想法吗?
  • @Borja 查看更新。您的 xml 具有命名空间这一事实是必不可少的,最好不要忽略这个事实。
  • @Borja 哦...看到您的 actual xml,很明显 porblem 仅在名称空间中,因为 Header 标记是自关闭的。我将更新我的答案并删除误导性部分,但请 - 发布相关信息以避免混淆......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2016-03-16
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多