Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 围绕消息元素循环并包含根节点_Xml_Xpath_Xsd_Biztalk_Biztalk 2013 - Fatal编程技术网

Xml 围绕消息元素循环并包含根节点

Xml 围绕消息元素循环并包含根节点,xml,xpath,xsd,biztalk,biztalk-2013,Xml,Xpath,Xsd,Biztalk,Biztalk 2013,本文中的第一个建议—演示如何循环遍历XML,并将XML拆分为编排中的各个元素 如果我想在所有后续的单个xml中包含原始xml的根节点,该怎么办?例如,这是他们拥有的xml: <Employees> <Employee title="mgr"> </Employee> <Employee title="vp"> </Employee> <Employee title="ceo"> </Employee> </

本文中的第一个建议—演示如何循环遍历XML,并将XML拆分为编排中的各个元素

如果我想在所有后续的单个xml中包含原始xml的根节点,该怎么办?例如,这是他们拥有的xml:

<Employees>
<Employee title="mgr">
</Employee>
<Employee title="vp">
</Employee>
<Employee title="ceo">
</Employee>
</Employees>
我将此xml发送到一个消息队列系统,该系统期望根节点如下所示

请帮忙。多谢各位

更新:

我发现根节点需要包含一个名称空间定义才能工作。像这样:


如何在输出中包含根节点的命名空间定义

这应该有效:

varXmlDoc.LoadXml("<Employees xmlns='http://mycompany.com/hr.xsd'/>");
EmployeeMessage = varXmlDoc;
xpath(EmployeeMessage, "/Employees") = xpath(InputMessage, "/*[local-name()='Employees' and namespace-uri()='']/*[local-name()='Employee' and namespace-uri()=''][" + counterStr + "]");
varXmlDoc.LoadXml(“”);
EmployeeMessage=varXmlDoc;
xpath(EmployeeMessage,“/Employees”)=xpath(InputMessage,“/*[local-name()='Employees'和namespace-uri()=''”]/*[local-name()='Employees'和namespace-uri()=''[“+countstr+]”;

其中'varXmlDoc'是System.Xml.XmlDocument类型

非常感谢。这是可行的,但有一个要求我忘了;命名空间定义应包含在输出的根节点中。请看我的更新。我们如何用LoadXml()实现这一点?谢谢@Bert,这就是我在这里要做的,叫做去匹配?我想这是去匹配的一种形式。通常情况下,您有一个内部包含成批消息的信封,当您对该消息进行解包时,您将删除该信封。这就是信封模式在XML反汇编程序中的工作方式。如果信封中有要保留的值与已删除的消息一起,则反汇编程序可以将这些值写入上下文属性。在您的示例中,您正在去除封套,但随后又重新添加封套。这可能不是很清楚。这是我所说的一个例子:
EmployeeMessage = xpath(InputMessage, "/*[local-name()='Employees' and namespace-uri()='']/*[local-name()='Employee' and namespace-uri()=''][" + counterStr + "]");
varXmlDoc.LoadXml("<Employees xmlns='http://mycompany.com/hr.xsd'/>");
EmployeeMessage = varXmlDoc;
xpath(EmployeeMessage, "/Employees") = xpath(InputMessage, "/*[local-name()='Employees' and namespace-uri()='']/*[local-name()='Employee' and namespace-uri()=''][" + counterStr + "]");