循环消息的元素并包含根节点

时间:2015-08-25 23:11:59

标签: xml xpath xsd biztalk biztalk-2013

本文中的第一个建议 - http://blog.eliasen.dk/2006/11/05/LoopingAroundElementsOfAMessage.aspx显示了如何遍历XML并将XML拆分为业务流程中的各个元素。

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

<Employees>
<Employee title="mgr">
</Employee>
<Employee title="vp">
</Employee>
<Employee title="ceo">
</Employee>
</Employees>

如果我想要每个元素输出,表达式将包含在<Employees>元素中:

<Employees>
<Employee title="mgr">
</Employee>
</Employees>

<Employees>
<Employee title="vp">
</Employee>
</Employees>

<Employees>
<Employee title="ceo">
</Employee>
</Employees>

该示例中使用的表达式是:

EmployeeMessage = xpath(InputMessage, "/*[local-name()='Employees' and namespace-uri()='']/*[local-name()='Employee' and namespace-uri()=''][" + counterStr + "]");

我将此xml发送到消息队列系统,该系统期望根节点如下所示。

请帮忙。谢谢。

更新:

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

<Employees xmlns="http://mycompany.com/hr.xsd"> <Employee title="mgr"> </Employee> </Employees>

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

1 个答案:

答案 0 :(得分:1)

这应该有效:

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 + "]");

其中&#39; varXmlDoc&#39;是类型System.Xml.XmlDocument