如何使用XSLT将整个xml(<any type =“”>)复制到单个节点?

时间:2017-08-08 13:05:43

标签: xml xslt xsd biztalk

我将不得不收到一条XML消息(类型为xmlDocument),并将整个xml内容复制到另一个强类型xml消息的单个节点上。

我创建了一个通用模式,如下所示,并在Map中使用它来转换它但我无法做到,因为MessageType(Namespace#RootNode)是未知的。

<?xml version="1.0" encoding="UTF-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:b="http://schemas.microsoft.com/BizTalk/2003">
  <xs:element name="Root">
    <xs:complexType>
      <xs:complexContent mixed="true">
        <xs:restriction base="xs:anyType"/>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:1)

您可以在业务流程中使用xpath函数。

1)在System.Xml.XmlElement变量(Variable_1)中获取源XML的内容:

Variable_1 = xpath(Message_1, "/");

2)使用Message Assignement形状初始化目标消息:

xmlDocument = new System.Xml.XmlDocument();
xmlDocument.LoadXml("<ns0:Root xmlns:ns0='http://BizTalkMassCopy.Schema1'><Field>Field_0</Field><MyRecord></MyRecord></ns0:Root>");
Message_2 = xmlDocument;

3)在相同的形状中,使用xpath函数分配XmlElement,在我的例子中,目标节点是'MyRecord':

xpath(Message_2, "/*[local-name()='Root' and namespace-uri()='http://BizTalkMassCopy.Schema1']/*[local-name()='MyRecord' and namespace-uri()='']") = Variable_1;