BizTalk - 将命名空间添加到xml

时间:2017-04-24 21:00:03

标签: xslt xsd biztalk xml-namespaces

我是BizTalk的新手,我在向输出文件添加命名空间方面遇到了问题。

我需要获得以下输出,命名空间位于根级别:

<?xml version="1.0" encoding="utf-8"?>
<TestExternalPO xmlns="http://Test.EDI.TestExternalPO.Schemas">
 <Routing/>
 <POHeader/>
</TestExternalPO>

我的xsd是:

<?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" 
           elementFormDefault="qualified" version="1.0">
<xs:annotation>
<xs:appinfo>
     <b:schemaInfo BizTalkServerEditorTool_Version="1.5"     root_reference="TestExternalPO"
      displayroot_reference="TestExternalPO" standard="XML"
    targetNamespace="http://Test.EDI.TestExternalPO.Schemas"
   xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />
</xs:appinfo>
</xs:annotation>

我的xslt是:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="TestExternalPO"/>
</xsl:template>

<xsl:template match="TestExternalPO">
<TestExternalPO xmlns="http://Test.EDI.TestExternalPO.Schemas">
  <Routing>....

非常感谢任何帮助,

梅格斯

4月25日更新。 感谢所有的评论。 上面的设置有效,但没有给我我想要的东西,即根级别的命名空间。

我在xslt中测试了命名空间,但在BizTalk上遇到了错误。

<xsl:template match="TestExternalPO">
      <TestExternalPO xmlns="http://Test.EDI.TestExternalPO.Schemas">
        <Routing>
          <xsl:attribute name="SendPartner">

BizTalk错误 - 按消息类型查找文档规范&#34; http://Test.EDI.TestExternalPO.Schemas&#34;失败。验证正确部署的架构。

以下是输入文件的结构:

<TestExternalPO>
  <POHeader>    
  </POHeader>
  <TradingPartnersList>
    <TradingPartners>   
    </TradingPartners>
  </TradingPartnersList>
  <Contract>   
  </Contract>
  <ItemsList>
    <Items>
    </Items>
  </ItemsList>
</TestExternalPO>

问题在于我声明了xmlns&#39;。 如果我添加&#39; targetNamespace&#39;,则输出在根元素处具有targetNamespace。

这有效:

<xsl:template match="TestExternalPO">
      <TestExternalPO targetNamespace="http://Test.EDI.TestExternalPO.Schemas">
        <Routing>
          <xsl:attribute name="SendPartner">

再次感谢您的帮助。 梅格斯

1 个答案:

答案 0 :(得分:0)

这是您的xslt外观。您要排除名称空间,因此将前缀添加到 exclude-result-prefixes

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                exclude-result-prefixes="ns0"
                xmlns:ns0="http://Test.EDI.TestExternalPO.Schemas">

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

<xsl:template match="TestExternalPO">
<ns0:TestExternalPO> 
  <Routing>....