2017-09-27 7 views
0

私はこのように区切られたファイルを持っています。BizTalkスキーマ - フィールドのタグの名前をヘッダーと同じにする

Name;ID;Type 
ABC;1;Blue 
PQR;2;Black 

私は上記のデータに対してフラットファイルスキーマを作成しようとしています。しかし、私はXMLタグをヘッダーと一致させる方法を見つけることができません。

それが作成されたXMLファイルは、私が欲しいもの

<Root> 
<Root_Child1>Root_Child</Root_Child1> 
<Root_Child2>Root_Child</Root_Child2> 
<Root_Child3>Root_Child</Root_Child3> 
</Root> 

であることは、私は55個のヘッダーを持っているこの

<Root> 
<Name>Root_Child</Name> 
<ID>Root_Child</ID> 
<Type>Root_Child</Type> 
</Root> 

のようなもので、手動でXSDファイルを変更するには退屈な仕事です。これを達成するための簡単な方法はありますか?

+0

をいいえ、あなたはそれらを更新する必要があり、フラットファイルウィザード残念ながら、ヘッダー行の名前に賢い人がいません。フラットファイルウィザードでそれらの名前を変更できましたが、それはさらに面倒です。 – Dijkgraaf

答えて

-1

フラットファイルスキーマだけでは不可能だと思います。マップを実装してそれらのタグを作成し、値を割り当てる必要があります。例えば

、このフラットファイルスキーマを持つ:

<?xml version="1.0" encoding="utf-16"?> 
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://BizTalkMassCopy.FlatFileSchema8" targetNamespace="http://BizTalkMassCopy.FlatFileSchema8" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:annotation> 
    <xs:appinfo> 
     <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" /> 
     <b:schemaInfo standard="Flat File" codepage="65001" default_pad_char=" " pad_char_type="char" count_positions_by_byte="false" parser_optimization="speed" lookahead_depth="3" suppress_empty_nodes="false" generate_empty_nodes="true" allow_early_termination="false" early_terminate_optional_fields="false" allow_message_breakup_of_infix_root="false" compile_parse_tables="false" root_reference="Root" /> 
    </xs:appinfo> 
    </xs:annotation> 
    <xs:element name="Root"> 
    <xs:annotation> 
     <xs:appinfo> 
     <b:recordInfo structure="delimited" child_delimiter_type="hex" child_delimiter="0xD 0xA" child_order="infix" sequence_number="1" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" /> 
     </xs:appinfo> 
    </xs:annotation> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:annotation> 
      <xs:appinfo> 
      <groupInfo sequence_number="0" xmlns="http://schemas.microsoft.com/BizTalk/2003" /> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:element name="Headers"> 
      <xs:annotation> 
      <xs:appinfo> 
       <b:recordInfo structure="delimited" child_delimiter_type="char" child_delimiter=";" child_order="infix" sequence_number="1" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" /> 
      </xs:appinfo> 
      </xs:annotation> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:annotation> 
       <xs:appinfo> 
        <groupInfo sequence_number="0" xmlns="http://schemas.microsoft.com/BizTalk/2003" /> 
       </xs:appinfo> 
       </xs:annotation> 
       <xs:element name="Headers_Child1" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="1" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
       <xs:element name="Headers_Child2" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="2" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
       <xs:element name="Headers_Child3" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="3" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element maxOccurs="unbounded" name="Item"> 
      <xs:annotation> 
      <xs:appinfo> 
       <b:recordInfo structure="delimited" child_delimiter_type="char" child_delimiter=";" child_order="infix" sequence_number="2" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" /> 
      </xs:appinfo> 
      </xs:annotation> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:annotation> 
       <xs:appinfo> 
        <groupInfo sequence_number="0" xmlns="http://schemas.microsoft.com/BizTalk/2003" /> 
       </xs:appinfo> 
       </xs:annotation> 
       <xs:element name="Item_Child1" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="1" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
       <xs:element name="Item_Child2" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="2" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
       <xs:element name="Item_Child3" type="xs:string"> 
       <xs:annotation> 
        <xs:appinfo> 
        <b:fieldInfo justification="left" sequence_number="3" /> 
        </xs:appinfo> 
       </xs:annotation> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

そして、あなたはこのカスタムXSLTでMapを実装:

<?xml version="1.0" encoding="UTF-16"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0" version="1.0" xmlns:s0="http://BizTalkMassCopy.FlatFileSchema8" xmlns:ns0="http://BizTalkMassCopy.Schema2"> 
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> 
    <xsl:template match="/"> 
    <xsl:apply-templates select="/s0:Root" /> 
    </xsl:template> 
    <xsl:template match="/s0:Root"> 
    <xsl:variable name="var:v1" select="Headers/Headers_Child1/text()" /> 
    <xsl:variable name="var:v2" select="Headers/Headers_Child2/text()" /> 
    <xsl:variable name="var:v3" select="Headers/Headers_Child3/text()" /> 

    <ns0:Root> 
     <xsl:for-each select="Item"> 
     <xsl:element name="Items"> 
      <xsl:element name="{$var:v1}"> 
      <xsl:value-of select="Item_Child1" /> 
      </xsl:element> 
      <xsl:element name="{$var:v2}"> 
      <xsl:value-of select="Item_Child2" /> 
      </xsl:element> 
      <xsl:element name="{$var:v3}"> 
      <xsl:value-of select="Item_Child3" /> 
      </xsl:element> 
     </xsl:element> 
     </xsl:for-each> 
    </ns0:Root> 
    </xsl:template> 
</xsl:stylesheet> 
+0

フラットファイルスキーマの要素の名前を変更することはできますが、実際にはそれを実行することをお勧めします。 – Dijkgraaf

+0

彼は多くのフィールドを持っているので、自動的に行うことができるかどうかという質問がありました。私の応答では、マップを使用して目的のタグを生成するソリューションを提供しました。 – felixmondelo

+0

出力はXSDファイルですか? XSLTがXSDファイルを取得して要素の名前を変更したり、最初の文章を削除したり修正したりすることができれば、正しい答えになります。 – Dijkgraaf

関連する問題