当前位置: 首页 > 知识库问答 >
问题:

从XML文档中删除根节点和第一个子节点,同时保留第二个子节点

利稳
2023-03-14

我目前正在为XML文档流开发一个自定义管道组件,其中根节点和该根节点的第一个子节点需要剥离,只剩下第二个子节点(现在是新的根节点)。

我正在使用XDocumt作为XML文档的容器类。我写了一些代码,获取第二个子节点,并创建一个新的XML文档,将该节点作为根节点,从而从图片中删除两个不需要的节点。

XNode secondChild = xDoc.Root.Elements().First().NextNode;
XDocument outputXml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                                             secondChild);

但是当我在Biztalk中测试这个设置时,我只得到一个空文档作为响应。它似乎创建了一个空的XML文档,然后返回。

举一个我想要实现的例子:

我想从这样的结构开始:

<Root>
<FirstChild></FirstChild>
<SecondChild></SecondChild>
</Root>

对于这样一个简单的结构:

<SecondChild></SecondChild>

管道中Execute方法的完整代码:

public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
        {
            var originalStream = pInMsg.BodyPart.GetOriginalDataStream();
            XDocument xDoc; //new XML document to return as the message
            using (XmlReader reader = XmlReader.Create(originalStream))
            {
                reader.MoveToContent();
                xDoc = XDocument.Load(reader);
            }

            XNode secondChild = xDoc.Root.Elements().First().NextNode;
            XDocument outputXml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                                             secondChild);

            // Returning stream, serializing the XML to byte array
            byte[] output = System.Text.Encoding.ASCII.GetBytes(outputXml.ToString());
            MemoryStream memoryStream = new MemoryStream();
            memoryStream.Write(output, 0, output.Length);
            memoryStream.Position = 0;
            pInMsg.BodyPart.Data = memoryStream; //overwrite the original message with the modified stream

            return pInMsg;
        }

环顾四周,我找到了这个答案,我试着遵循这个答案,但正如前面提到的,它生成了一个空文档。除了简单地创建一个新的XDocument之外,还有其他选择吗?

共有1个答案

文建业
2023-03-14

如果您开发了一个常规映射来编辑文档,您可以将其放在接收端口的映射部分。创建、测试和安装比管道组件更简单。

 类似资料:
  • 我的XML 我所拥有的。。 //移动到父节点以遍历其余项} 我想要的是到达“cd”节点。 在一些示例中,我看到了VTDNav。下一个_子节点似乎不可用。有人能建议如何到达我需要的节点吗?目前,我正在设法通过到达第一个_子节点,然后移动到下一个兄弟节点来实现这一点 谢谢你的帮助 当做

  • 问题内容: 例如 根= NodeToInsert可能是 输出应为: 问题答案: 如果事实证明我只是为您做功课,我会感到非常恼火。 结果将是:

  • 我正在为我的Data Structures类编写一个项目,该项目要求我编写一个类来实现INT的链接列表。 为节点使用内部类 包括以下方法 编写一个测试程序,使您能够以任意顺序使用所需的任何数据测试所有方法 我必须创建一个名为“public int deleteFromFront()”的方法。此方法旨在“删除列表前面的节点,并返回其中的int,如果列表为空,则返回null。”下面是我的代码。然而,当

  • 问题内容: 我正在一个项目中,用户对我们的代客服务的请求在另一端代客接受请求。 我正在使用Firebase作为后端,并应要求将客户uid保存在“ request”子项上。 当代客接受请求时,客户uid应从“请求”节点移至“进行中”节点。 我怎样才能做到这一点? 问题答案: 我建议使用这个: 这来自以下来源:https : //gist.github.com/katowulf/6099042。我在J

  • 本文向大家介绍Javascript removeChild()删除节点及删除子节点的方法,包括了Javascript removeChild()删除节点及删除子节点的方法的使用技巧和注意事项,需要的朋友参考一下 下面给大家介绍Javascript removeChild()删除节点的方法,具体详情如下所示: 在Javascript中,只提供了一种删除节点的方法:removeChild()。 rem

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?