【问题标题】:Looping around elements of a message and include root node循环消息的元素并包含根节点
【发布时间】:2015-08-25 23:11:58
【问题描述】:

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

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

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

如果我希望每个元素输出都包含在&lt;Employees&gt; 元素中,表达式会是什么样子:

<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>

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

【问题讨论】:

    标签: xml xpath xsd biztalk biztalk-2013


    【解决方案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 + "]");
    

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

    【讨论】:

    • 非常感谢。这行得通,但是我忘记了一个要求;命名空间定义应包含在输出的根节点中。请参阅我的更新。我们如何使用 LoadXml () 来实现这一点?
    • 谢谢@Bert 我在这里要做的就是分批吗?
    • 我想这是一种分批形式。通常你有一个信封,里面有批处理的邮件,当你分批邮件时你会删除信封。这就是信封模式在 XML 反汇编器中的工作方式。如果信封中有您希望与分批消息一起保留的值,反汇编程序可以将这些值写入上下文属性。在您的示例中,您正在分批,然后重新添加信封。这可能不是很清楚。这是我所说的一个例子:msdn.microsoft.com/en-us/library/aa546772.aspx
    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多