【问题标题】:Duplicate existing element in xml in C#在 C# 中复制 xml 中的现有元素
【发布时间】:2014-06-30 15:09:12
【问题描述】:

我想从这个 xml 中克隆元素 prijemkaItem

元素 prijemkaItem 是通过这个函数得到的:

XElement doc = XElement.Load("input.xml");            
        XmlReader reader = XmlReader.Create("input.xml");

        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:

                    if (reader.Name == "pri:prijemkaItem")
                        elementPrijemkaItem = XElement.ReadFrom(reader) as XElement;

                    break;
            }
        }
        reader.Close()

我想把这个元素放在它自己后面。请问有什么办法吗?

感谢您的任何建议。

【问题讨论】:

  • “把元素放在自己后面” - 你能澄清一下这条线吗?另外,我什至看不到你的 xml。您可以将 xml 复制并粘贴到问题中吗? (您可以通过单击“编辑”按钮为您的问题添加更多信息)。您不必复制所有 xml,只需复制节点即可了解 xml 结构。
  • 我在将所有 xml 复制到代码块时遇到问题。所以我做了这个小的 xml 打印屏幕。但现在它被 Fuex bellow 解决了。感谢您的回复。

标签: c# xml clone


【解决方案1】:

为简单起见,假设您的 Xml 结构如下:

<?xml version="1.0" encoding="utf-8"?>
<dat:dataPack xmlns:dat="datNamespace">
  <dat:dataPackItem>
    <pri:prijemka xmlns:pri="priNamespace">
      <othernode></othernode>
    </pri:prijemka>
  </dat:dataPackItem>
</dat:dataPack>

如果你想复制pri:prijemka 节点,你可以使用Linq to Xml

//using System.Xml.Linq;

//load the xml file
Document doc = XDocument.Load( "D:\\input.xml" );
//get the "dat" namespace 
var datNamespace = doc.Root.GetNamespaceOfPrefix( "dat" );

//get "dat:dataPackItem" node
var dataPackItemNode = doc.Root.Element( datNamespace + "dataPackItem" );
//since you don't know the "pri" namespace you can do:
var prijemkaNode = dataPackItemNode.Descendants( )
                       .Where(x => x.Name.LocalName == "prijemka")
                       .FirstOrDefault();

//add it to the "dat:dataPackItem" node
dataPackItemNode.Add( prijemkaNode );
//save the xml file
doc.Save( "D:\\input.xml" );   

结果是:

<?xml version="1.0" encoding="utf-8"?>
<dat:dataPack xmlns:dat="datNamespace">
  <dat:dataPackItem>
    <pri:prijemka xmlns:pri="priNamespace">
      <othernode></othernode>
    </pri:prijemka>
    <pri:prijemka xmlns:pri="priNamespace">
      <othernode></othernode>
    </pri:prijemka>
  </dat:dataPackItem>
</dat:dataPack>

【讨论】:

  • 不客气。我很高兴它对你有用,请考虑接受答案:),如果你愿意,可以投票。谢谢。
  • 对不起,我已经尝试过投票,但我需要至少有 15 的声望,但只有 13。但不用担心什么时候有,我会投票..
  • 好的,谢谢。您可以将其标记为已接受,如果您不知道如何,请查看here。不过干得好。
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 2021-01-31
  • 2015-02-21
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多