【问题标题】:C# How to insert XPathnavigator into XPathnavigatorC# 如何将 XPathnavigator 插入 XPathnavigator
【发布时间】:2021-03-18 16:43:30
【问题描述】:

假设我有以下 XML 文件

<root></root>

还有以下文件

<child>
    <more-childeren> </more-childeren>
</child>

如何将第二个文件插入第一个文件以创建以下文件:

<root>
    <child>
        <more-childeren> </more-childeren>
    </child>
</root>

我正在接收作为 XPathNavigator 的第二个文件。将 XPathNavigator 插入 XML 文件的最快方法是什么?

【问题讨论】:

    标签: c# xml xslt xml-parsing


    【解决方案1】:

    如果您在可编辑的树结构(如 XmlDocument/XmlNode)上使用 XPathNavigator,则使用采用 XPathNavigator https://docs.microsoft.com/en-us/dotnet/api/system.xml.xpath.xpathnavigator.appendchild?view=net-5.0#System_Xml_XPath_XPathNavigator_AppendChild_System_Xml_XPath_XPathNavigator_AppendChild 方法。这至少是最方便且受 API 支持的方式,“最快”是您需要测试的不同标准。

    一个使用 .NET 框架为我工作的简单示例是

                XmlDocument doc = new XmlDocument();
                doc.LoadXml(@"<root></root>");
    
                XPathNavigator nav = doc.DocumentElement.CreateNavigator();
    
                XPathDocument doc2;
                using (XmlReader xr = XmlReader.Create(new StringReader(@"<child>
        <more-childeren> </more-childeren>
    </child>")))
                {
                    doc2 = new XPathDocument(xr);
                }
    
    
                XPathNavigator nav2 = doc2.CreateNavigator();
                nav2.MoveToFirstChild();
    
                nav.AppendChild(nav2);
    
                doc.Save(Console.Out);
    
    

    调用nav2.MoveToFirstChild(); 似乎对于不出现您在 cmets 中提到的异常至关重要。

    【讨论】:

    • 当我使用 appendChild 方法时,我得到一个 Operation is not valid 由于导航器错误的当前位置。即使我事先使用 MoveToRoot() 也会收到此错误
    • @Jiren,看看编辑中的例子是否有帮助。
    【解决方案2】:

    尝试以下 xml linq :

               string xml1 = "<root></root>";
                string xml2 = "<child><more-childeren> </more-childeren></child>";
    
                XDocument doc1 = XDocument.Parse(xml1);
    
                XElement root = doc1.Root;
                root.Add(XElement.Parse(xml2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多