【问题标题】:Add new XElement with data type attribute添加具有数据类型属性的新 XElement
【发布时间】:2023-03-11 01:16:01
【问题描述】:

您好,我有一个 xml 文件:

<?xml version="1.0"?>
<TreeList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Columns>
    <Column>
      <ColumnName>123</ColumnName>
      <ColumnType>Bound</ColumnType>
    </Column>
  </Columns>
  <Nodes>
    <Node Id="0" ParentId="-1">
      <NodeData>
        <Cell xsi:type="xsd:string">Node1</Cell>
      </NodeData>
    </Node>
    <Node Id="1" ParentId="0">
      <NodeData>
        <Cell xsi:type="xsd:string">Node11</Cell>
      </NodeData>
    </Node>
  </Nodes>
</TreeList>

我需要添加新的 XElement:

<Node Id="xx" ParentId="yy">
  <NodeData>
    <Cell xsi:type="xsd:string">NewNode</Cell>
  </NodeData>
</Node>

我的问题出在 XElement 的“xsi:type="xsd:string" 部分。我怎样才能像这样设置 XAttribute?

我尝试了以下操作:

    public static void AdNewNode(string filePath, string id, string parentId, string value)
    {
        XElement xml = XElement.Load(filePath);
        XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
        XNamespace xsd = "http://www.w3.org/2001/XMLSchema";
        XAttribute attribute1 = new XAttribute(xsd + "string", string.Empty);
        XAttribute attribute2 = new XAttribute(xsi + "type", attribute1.ToString());

        XElement innerNode = new XElement("NodeData", 
                        new XElement("Cell",attribute2, attribute1, value));
        XElement elemnet = new XElement("Node", new XAttribute("Id", id), new XAttribute("ParentId", parentId), innerNode);

        xml.Add(elemnet);
   }

这是结果:

<Node Id="2" ParentId="1">
  <NodeData>
    <Cell p3:type="p0:string=&quot;&quot;" p4:string="" xmlns:p4="http://www.w3.org/2001/XMLSchema" xmlns:p3="http://www.w3.org/2001/XMLSchema-instance">New Node</Cell>
  </NodeData>
</Node> 

有人可以帮我吗?

【问题讨论】:

    标签: c# linq xelement


    【解决方案1】:

    "xsd:string" 只是普通字符串,所以你应该能够像这样构造xsi:type 属性:

    XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
    XAttribute attribute = new XAttribute(xsi+"type", "xsd:string");
    

    然后将attribute随便添加到它的父元素中:

    XElement innerNode = new XElement("NodeData",
                            new XElement("Cell", attribute, value));
    XElement elemnet = new XElement("Node", 
                            new XAttribute("Id", id), 
                            new XAttribute("ParentId", parentId), 
                            innerNode);
    

    【讨论】:

    • @user3569465 欢迎您。然后别忘了accept答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多