在 biztalk 2009 中将结构映射到集合

发布于 2024-11-04 23:12:10 字数 686 浏览 6 评论 0原文

我的输入类似于:

<Person>
 <FirstName>abc</FirstName>
 <Bsn>2345467</Bsn>
<Person>

输出应该是:

<Person>
  <properties>
    <property>
       <propertyname> Firstname </propertyname>
       <propertyValue> abc </propertyValue>
    </property>
    <property>
       <propertyname> Bsn</propertyname>
       <propertyValue> 2345467 </propertyValue>
    </property>
   </properties>
</Person>

我的意思是目标没有特定的属性/属性。相反,它有一个属性集合,其中我指定属性的名称和属性的值。

非常感谢任何帮助。

我正在使用 Biztalk 2009

请帮助

My Input is something like :

<Person>
 <FirstName>abc</FirstName>
 <Bsn>2345467</Bsn>
<Person>

The output should be :

<Person>
  <properties>
    <property>
       <propertyname> Firstname </propertyname>
       <propertyValue> abc </propertyValue>
    </property>
    <property>
       <propertyname> Bsn</propertyname>
       <propertyValue> 2345467 </propertyValue>
    </property>
   </properties>
</Person>

I mean the target does not have specific properties/atrributes. Instead it has a collection of properties, wherein i specify the property's name and property's value.

Any help is highly appreciated.

I am using Biztalk 2009

Please help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦境 2024-11-11 23:12:10

在这种情况下,我将使用自定义 XSLT - 要么使用 脚本功能 或用自定义 XSLT 文件替换整个地图(取决于其他人的地图外观)。

解决方案可能看起来像这样。

XML

<Persons>
 <Person>
  <FirstName>abc</FirstName>
  <Bsn>2345467</Bsn>
 </Person>
</Persons>

XSLT

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="Persons">
  <Persons>
   <xsl:apply-templates select="Person" />
  </Persons>
 </xsl:template>

 <xsl:template match="Person">
  <Person>
   <properties>
    <xsl:apply-templates select="*" mode="properties" />
   </properties>
  </Person>
 </xsl:template>

 <xsl:template match="node()" mode="properties">
  <property>
   <propertyname>
    <xsl:value-of select="local-name()"/>
   </propertyname>
   <propertyvalue>
    <xsl:value-of select="."/>
   </propertyvalue>
 </property>
 </xsl:template>

</xsl:stylesheet>

结果

 <?xml version="1.0" encoding="utf-8"?>
 <Persons>
  <Person>
   <properties>
    <property>
     <propertyname>FirstName</propertyname>
     <propertyvalue>abc</propertyvalue>
    </property>
    <property>
     <propertyname>Bsn</propertyname>
     <propertyvalue>2345467</propertyvalue>
    </property>
   </properties>
  </Person>
 </Persons>

I would use custom XSLT in this case- either by using the scripting functiod or by replacing the whole map with a custom XSLT file (depending on how the rest of you map looks).

The solution could look something like this.

XML

<Persons>
 <Person>
  <FirstName>abc</FirstName>
  <Bsn>2345467</Bsn>
 </Person>
</Persons>

XSLT

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="Persons">
  <Persons>
   <xsl:apply-templates select="Person" />
  </Persons>
 </xsl:template>

 <xsl:template match="Person">
  <Person>
   <properties>
    <xsl:apply-templates select="*" mode="properties" />
   </properties>
  </Person>
 </xsl:template>

 <xsl:template match="node()" mode="properties">
  <property>
   <propertyname>
    <xsl:value-of select="local-name()"/>
   </propertyname>
   <propertyvalue>
    <xsl:value-of select="."/>
   </propertyvalue>
 </property>
 </xsl:template>

</xsl:stylesheet>

Result

 <?xml version="1.0" encoding="utf-8"?>
 <Persons>
  <Person>
   <properties>
    <property>
     <propertyname>FirstName</propertyname>
     <propertyvalue>abc</propertyvalue>
    </property>
    <property>
     <propertyname>Bsn</propertyname>
     <propertyvalue>2345467</propertyvalue>
    </property>
   </properties>
  </Person>
 </Persons>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文