Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何有条件地修改XML?_Xml_Xslt 2.0 - Fatal编程技术网

如何有条件地修改XML?

如何有条件地修改XML?,xml,xslt-2.0,Xml,Xslt 2.0,我有一个XML文档,它通过实体标记模型运行,并生成以下XML。我正在尝试使用XSLT将该输出重新格式化为可管理、高效的方式 基本上,我希望根据实体类型修改字段名称,并将所有相关信息合并到一个部分或ENTINFO标记中。这样,当我查看SSN属于乔治·华盛顿和托马斯·杰斐逊的数据时就很清楚了。这在XSLT中是可能的,还是编写脚本更好 原始XML <?xml version="1.0" encoding="UTF-8"?> <NORMDOC> <DOC>

我有一个XML文档,它通过实体标记模型运行,并生成以下XML。我正在尝试使用XSLT将该输出重新格式化为可管理、高效的方式

基本上,我希望根据实体类型修改字段名称,并将所有相关信息合并到一个部分或
ENTINFO
标记中。这样,当我查看SSN属于乔治·华盛顿和托马斯·杰斐逊的数据时就很清楚了。这在XSLT中是可能的,还是编写脚本更好

原始XML

<?xml version="1.0" encoding="UTF-8"?>
<NORMDOC>
   <DOC>
      <DOCID>112233</DOCID>
      <FI fitype="B" xref="54321">
         <FIName>FOUNDING FATHERS CREDIT UNION</FIName>
         <FITIN>1212</FITIN>
      </FI>
      <OIs>
         <OI xref="654321">
            <OIName>FOUNDING FATHERS CREDIT UNION</OIName>
         </OI>
      </OIs>
      <Subjects>
         <Subject stype="PER" xref="98765">
            <SubjectFullName type="L">Washington/George</SubjectFullName>
            <SubjectLastName type="L">Washington</SubjectLastName>
            <SubjectFirstName type="L">George</SubjectFirstName>
            <SubjectID type="SSN/ITIN">111111111</SubjectID>
            <SubjectPhone type="Residence">1112223333</SubjectPhone>
         </Subject>
         <Subject stype="PER" xref="98876">
            <SubjectFullName type="L">Jefferson/Thomas</SubjectFullName>
            <SubjectLastName type="L">Jefferson</SubjectLastName>
            <SubjectFirstName type="L">Thomas</SubjectFirstName>
            <SubjectID type="SSN/ITIN">222222222</SubjectID>
         </Subject>
      </Subjects>
      <TXT>
        <S sid="112233-SENT-001"><ENAMEX type="PERSON" id="PER-112233-001">George Washington</ENAMEX> and <ENAMEX type="PERSON" id="PER-112233-002">Thomas Jefferson</ENAMEX> were both founding fathers.</S>
        <S sid="112233-SENT-002"><ENAMEX type="PERSON" id="PER-112233-002">Thomas Jefferson</ENAMEX> has a social security number of <IDEX type="SSN" id="SSN-112233-075">222-22-2222</IDEX>.</S>
        <S sid="112233-SENT-003"><ENAMEX type="PERSON" id="PER-112233-001">George Washington</ENAMEX> has social security number <IDEX type="SSN" id="SSN-112233-074">111-11-1111</IDEX>.</S>
        <S sid="112233-SENT-004"><ENAMEX type="PERSON" id="PER-112233-001">George Washington</ENAMEX> can be reached at <IDEX type="PHONE" id="PHO-112233-100">111-222-3333</IDEX>.</S>
      </TXT>
   </DOC>
   <ENTINFO ID="PHO-112233-100"
            TYPE="PHONE"
            NORM="(111) 222-3333"
            REFID="PHO-112233-100"
            MENTION="111-222-3333"/>
   <ENTINFO ID="SSN-112233-075"
            TYPE="SSN"
            NORM="222222222"
            REFID="SSN-112233-075"
            MENTION="social security number of 222-22-2222"
            SSNTYPE="SSN"/>
   <ENTINFO ID="SSN-112233-074"
            TYPE="SSN"
            NORM="111111111"
            REFID="SSN-112233-074"
            MENTION="social security number of 111-11-1111"
            SSNTYPE="SSN"/>
   <ENTINFO ID="PER-112233-001"
            TYPE="PERSON"
            NORM="Washington, George"
            REFID="PER-112233-001"
            MENTION="George Washington"
            GIVEN="George"
            MIDDLE=""
            SURNAME="Washington"/>
   <ENTINFO ID="PER-112233-002"
            TYPE="PERSON"
            NORM="Jefferson, Thomas"
            REFID="PER-112233-002"
            MENTION="Thomas Jefferson"
            GIVEN="Thomas"
            MIDDLE=""
            SURNAME="Jefferson"/>
   <RELINFO ID="REL-112233-355"
            RELTYPE="PER-IDENT"
            PERID="PER-112233-002"
            IDENTID="SSN-112233-075"
            SENTID="112233-SENT-002"/>
   <RELINFO ID="REL-112233-356"
            RELTYPE="PER-IDENT"
            PERID="PER-112233-001"
            IDENTID="SSN-112233-074"
            SENTID="112233-SENT-003"/>
   <RELINFO ID="REL-112233-357"
            RELTYPE="PER-IDENT"
            PERID="PER-112233-001"
            IDENTID="SSN-112233-100"
            SENTID="112233-SENT-004"/>
</NORMDOC>

112233
开国元勋信用合作社
1212
开国元勋信用合作社
华盛顿/乔治
华盛顿
乔治
111111111
1112223333
杰斐逊/托马斯
杰斐逊
托马斯
222222222
乔治·华盛顿和托马斯·杰斐逊都是开国元勋。
托马斯·杰斐逊的社会保险号码是222-22-2222。
乔治·华盛顿的社会保险号码是111-11-1111。
可以拨打111-222-3333联系乔治·华盛顿。
XSLT

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- Transforms the output from the NLP tool into the appropriate format for storage. -->
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <!-- Create sub-tags from metadata in ENTINFO -->
    <xsl:template match="/NORMDOC">
        <xsl:apply-templates select="DOC"/>
        <ENTITIES>
            <xsl:apply-templates select="ENTINFO"/>
        </ENTITIES>
    </xsl:template>
    <!-- Delete and append subjects, extraneous information gleaned from party tags -->
    <xsl:template match="Subject">
        <Subject_xref><xsl:value-of select="@xref"/></Subject_xref>
    </xsl:template>
    <!-- Make a copy of narrative text and strip out label tags -->
    <xsl:template match="TXT">
        <RAW_TXT>
            <xsl:value-of select="."/>
        </RAW_TXT>
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="S">
        <xsl:copy>
            <xsl:apply-templates select="*" mode="extra"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*" mode="extra">
        <xsl:element name="{name()}_{@type}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
    <!-- Append tag labels in metadata -->
    <xsl:template match="ENTINFO">
        <xsl:copy>
            <xsl:for-each select="@*">
                <xsl:element name="ENTINFO_{translate(name(), '-', '_')}">
                    <xsl:value-of select="." />
                </xsl:element>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>

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

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

实际产出

<NORMDOC>
   <DOC>
      <DOCID>112233</DOCID>
      <FI>
         <FIName>DISCOVER BANK</FIName>
         <FITIN>510020270</FITIN>
      </FI>
      <OIs>
         <OI>
            <OIName>DISCOVER BANK</OIName>
         </OI>
      </OIs>
      <Subjects>
         <Subject_xref>98765</Subject_xref>
         <Subject_xref>98876</Subject_xref>
      </Subjects>
      <RAW_TXT>George Washington and Thomas Jefferson were both founding fathers.Thomas Jefferson has a social security number of 222-22-2222.George Washington has social security number 111-11-1111.George Washington can be reached at 111-222-3333.</RAW_TXT>
      <TXT>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
         </S>
         <S>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
            <IDEX_SSN>222-22-2222</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_SSN>111-11-1111</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_PHONE>111-222-3333</IDEX_PHONE>
         </S>
      </TXT>
   </DOC>
   <ENTITIES>
      <ENTINFO>
         <ENTINFO_ID>PHO-112233-100</ENTINFO_ID>
         <ENTINFO_TYPE>PHONE</ENTINFO_TYPE>
         <ENTINFO_NORM>(111) 222-3333</ENTINFO_NORM>
         <ENTINFO_REFID>PHO-112233-100</ENTINFO_REFID>
         <ENTINFO_MENTION>111-222-3333</ENTINFO_MENTION>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>SSN-112233-075</ENTINFO_ID>
         <ENTINFO_TYPE>SSN</ENTINFO_TYPE>
         <ENTINFO_NORM>222222222</ENTINFO_NORM>
         <ENTINFO_REFID>SSN-112233-075</ENTINFO_REFID>
         <ENTINFO_MENTION>social security number of 222-22-2222</ENTINFO_MENTION>
         <ENTINFO_SSNTYPE>SSN</ENTINFO_SSNTYPE>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>SSN-112233-074</ENTINFO_ID>
         <ENTINFO_TYPE>SSN</ENTINFO_TYPE>
         <ENTINFO_NORM>111111111</ENTINFO_NORM>
         <ENTINFO_REFID>SSN-112233-074</ENTINFO_REFID>
         <ENTINFO_MENTION>social security number of 111-11-1111</ENTINFO_MENTION>
         <ENTINFO_SSNTYPE>SSN</ENTINFO_SSNTYPE>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>PER-112233-001</ENTINFO_ID>
         <ENTINFO_TYPE>PERSON</ENTINFO_TYPE>
         <ENTINFO_NORM>Washington, George</ENTINFO_NORM>
         <ENTINFO_REFID>PER-112233-001</ENTINFO_REFID>
         <ENTINFO_MENTION>George Washington</ENTINFO_MENTION>
         <ENTINFO_GIVEN>George</ENTINFO_GIVEN>
         <ENTINFO_MIDDLE/>
         <ENTINFO_SURNAME>Washington</ENTINFO_SURNAME>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>PER-112233-002</ENTINFO_ID>
         <ENTINFO_TYPE>PERSON</ENTINFO_TYPE>
         <ENTINFO_NORM>Jefferson, Thomas</ENTINFO_NORM>
         <ENTINFO_REFID>PER-112233-002</ENTINFO_REFID>
         <ENTINFO_MENTION>Thomas Jefferson</ENTINFO_MENTION>
         <ENTINFO_GIVEN>Thomas</ENTINFO_GIVEN>
         <ENTINFO_MIDDLE/>
         <ENTINFO_SURNAME>Jefferson</ENTINFO_SURNAME>
      </ENTINFO>
   </ENTITIES>
</NORMDOC>
<NORMDOC>
   <DOC>
      <DOCID>112233</DOCID>
      <FI>
         <FIName>FOUNDING FATHERS CREDIT UNION</FIName>
         <FITIN>1212</FITIN>
      </FI>
      <OIs>
         <OI>
            <OIName>FOUNDING FATHERS CREDIT UNION</OIName>
         </OI>
      </OIs>
      <Subjects>
         <Subject_xref>98765</Subject_xref>
         <Subject_xref>98876</Subject_xref>
      </Subjects>
      <RAW_TXT>George Washington and Thomas Jefferson were both founding fathers.Thomas Jefferson has a social security number of 222-22-2222.George Washington has social security number 111-11-1111.George Washington can be reached at 111-222-3333.</RAW_TXT>
      <TXT>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
         </S>
         <S>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
            <IDEX_SSN>222-22-2222</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_SSN>111-11-1111</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_PHONE>111-222-3333</IDEX_PHONE>
         </S>
      </TXT>
   </DOC>
   <ENTITIES>
     <ENTINFO>
       <ENTINFO_PERSON_NORM>Washington, George</ENTINFO_PERSON_NORM>
       <ENTINFO_PERSON_MENTION>George Washington</ENTINFO_PERSON_MENTION>
       <ENTINFO_PERSON_GIVEN>George</ENTINFO_PERSON_GIVEN>
       <ENTINFO_PERSON_MIDDLE/>
       <ENTINFO_PERSON_SURNAME>Washington</ENTINFO_PERSON_SURNAME>
       <ENTINFO_SSN_NORM>111111111</ENTINFO_SSN_NORM>
       <ENTINFO_SSN_MENTION>social security number of 111-11-1111</ENTINFO_SSN_MENTION>
       <ENTINFO_PHONE_NORM>(111) 222-3333</ENTINFO_PHONE_NORM>
       <ENTINFO_PHONE_MENTION>111-222-3333</ENTINFO_PHONE_MENTION>
     </ENTINFO>
     <ENTINFO>
       <ENTINFO_PERSON_NORM>Jefferson, Thomas</ENTINFO_PERSON_NORM>
       <ENTINFO_PERSON_MENTION>Thomas Jefferson</ENTINFO_PERSON_MENTION>
       <ENTINFO_PERSON_GIVEN>Thomas</ENTINFO_PERSON_GIVEN>
       <ENTINFO_PERSON_MIDDLE/>
       <ENTINFO_PERSON_SURNAME>Jefferson</ENTINFO_PERSON_SURNAME>
       <ENTINFO_SSN_NORM>222222222</ENTINFO_SSN_NORM>
       <ENTINFO_SSN_MENTION>social security number of 222-22-2222</ENTINFO_SSN_MENTION>
     </ENTINFO>
   </ENTITIES>
</NORMDOC>

112233
探索银行
510020270
探索银行
98765
98876
乔治·华盛顿和托马斯·杰斐逊都是开国元勋。托马斯·杰斐逊的社会保险号码是222-22-2222。乔治·华盛顿的社会保险号码是111-11-1111。可以拨打111-222-3333联系乔治·华盛顿。
乔治华盛顿
托马斯·杰斐逊
托马斯·杰斐逊
222-22-2222
乔治华盛顿
111-11-1111
乔治华盛顿
111-222-3333
PHO-112233-100
电话
(111) 222-3333
PHO-112233-100
111-222-3333
SSN-112233-075
SSN
222222222
SSN-112233-075
社会保险号码222-22-2222
SSN
SSN-112233-074
SSN
111111111
SSN-112233-074
社会保险号码111-11-1111
SSN
PER-112233-001
人
华盛顿,乔治
PER-112233-001
乔治华盛顿
乔治
华盛顿
PER-112233-002
人
杰斐逊,托马斯
PER-112233-002
托马斯·杰斐逊
托马斯
杰斐逊
预期输出

<NORMDOC>
   <DOC>
      <DOCID>112233</DOCID>
      <FI>
         <FIName>DISCOVER BANK</FIName>
         <FITIN>510020270</FITIN>
      </FI>
      <OIs>
         <OI>
            <OIName>DISCOVER BANK</OIName>
         </OI>
      </OIs>
      <Subjects>
         <Subject_xref>98765</Subject_xref>
         <Subject_xref>98876</Subject_xref>
      </Subjects>
      <RAW_TXT>George Washington and Thomas Jefferson were both founding fathers.Thomas Jefferson has a social security number of 222-22-2222.George Washington has social security number 111-11-1111.George Washington can be reached at 111-222-3333.</RAW_TXT>
      <TXT>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
         </S>
         <S>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
            <IDEX_SSN>222-22-2222</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_SSN>111-11-1111</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_PHONE>111-222-3333</IDEX_PHONE>
         </S>
      </TXT>
   </DOC>
   <ENTITIES>
      <ENTINFO>
         <ENTINFO_ID>PHO-112233-100</ENTINFO_ID>
         <ENTINFO_TYPE>PHONE</ENTINFO_TYPE>
         <ENTINFO_NORM>(111) 222-3333</ENTINFO_NORM>
         <ENTINFO_REFID>PHO-112233-100</ENTINFO_REFID>
         <ENTINFO_MENTION>111-222-3333</ENTINFO_MENTION>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>SSN-112233-075</ENTINFO_ID>
         <ENTINFO_TYPE>SSN</ENTINFO_TYPE>
         <ENTINFO_NORM>222222222</ENTINFO_NORM>
         <ENTINFO_REFID>SSN-112233-075</ENTINFO_REFID>
         <ENTINFO_MENTION>social security number of 222-22-2222</ENTINFO_MENTION>
         <ENTINFO_SSNTYPE>SSN</ENTINFO_SSNTYPE>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>SSN-112233-074</ENTINFO_ID>
         <ENTINFO_TYPE>SSN</ENTINFO_TYPE>
         <ENTINFO_NORM>111111111</ENTINFO_NORM>
         <ENTINFO_REFID>SSN-112233-074</ENTINFO_REFID>
         <ENTINFO_MENTION>social security number of 111-11-1111</ENTINFO_MENTION>
         <ENTINFO_SSNTYPE>SSN</ENTINFO_SSNTYPE>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>PER-112233-001</ENTINFO_ID>
         <ENTINFO_TYPE>PERSON</ENTINFO_TYPE>
         <ENTINFO_NORM>Washington, George</ENTINFO_NORM>
         <ENTINFO_REFID>PER-112233-001</ENTINFO_REFID>
         <ENTINFO_MENTION>George Washington</ENTINFO_MENTION>
         <ENTINFO_GIVEN>George</ENTINFO_GIVEN>
         <ENTINFO_MIDDLE/>
         <ENTINFO_SURNAME>Washington</ENTINFO_SURNAME>
      </ENTINFO>
      <ENTINFO>
         <ENTINFO_ID>PER-112233-002</ENTINFO_ID>
         <ENTINFO_TYPE>PERSON</ENTINFO_TYPE>
         <ENTINFO_NORM>Jefferson, Thomas</ENTINFO_NORM>
         <ENTINFO_REFID>PER-112233-002</ENTINFO_REFID>
         <ENTINFO_MENTION>Thomas Jefferson</ENTINFO_MENTION>
         <ENTINFO_GIVEN>Thomas</ENTINFO_GIVEN>
         <ENTINFO_MIDDLE/>
         <ENTINFO_SURNAME>Jefferson</ENTINFO_SURNAME>
      </ENTINFO>
   </ENTITIES>
</NORMDOC>
<NORMDOC>
   <DOC>
      <DOCID>112233</DOCID>
      <FI>
         <FIName>FOUNDING FATHERS CREDIT UNION</FIName>
         <FITIN>1212</FITIN>
      </FI>
      <OIs>
         <OI>
            <OIName>FOUNDING FATHERS CREDIT UNION</OIName>
         </OI>
      </OIs>
      <Subjects>
         <Subject_xref>98765</Subject_xref>
         <Subject_xref>98876</Subject_xref>
      </Subjects>
      <RAW_TXT>George Washington and Thomas Jefferson were both founding fathers.Thomas Jefferson has a social security number of 222-22-2222.George Washington has social security number 111-11-1111.George Washington can be reached at 111-222-3333.</RAW_TXT>
      <TXT>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
         </S>
         <S>
            <ENAMEX_PERSON>Thomas Jefferson</ENAMEX_PERSON>
            <IDEX_SSN>222-22-2222</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_SSN>111-11-1111</IDEX_SSN>
         </S>
         <S>
            <ENAMEX_PERSON>George Washington</ENAMEX_PERSON>
            <IDEX_PHONE>111-222-3333</IDEX_PHONE>
         </S>
      </TXT>
   </DOC>
   <ENTITIES>
     <ENTINFO>
       <ENTINFO_PERSON_NORM>Washington, George</ENTINFO_PERSON_NORM>
       <ENTINFO_PERSON_MENTION>George Washington</ENTINFO_PERSON_MENTION>
       <ENTINFO_PERSON_GIVEN>George</ENTINFO_PERSON_GIVEN>
       <ENTINFO_PERSON_MIDDLE/>
       <ENTINFO_PERSON_SURNAME>Washington</ENTINFO_PERSON_SURNAME>
       <ENTINFO_SSN_NORM>111111111</ENTINFO_SSN_NORM>
       <ENTINFO_SSN_MENTION>social security number of 111-11-1111</ENTINFO_SSN_MENTION>
       <ENTINFO_PHONE_NORM>(111) 222-3333</ENTINFO_PHONE_NORM>
       <ENTINFO_PHONE_MENTION>111-222-3333</ENTINFO_PHONE_MENTION>
     </ENTINFO>
     <ENTINFO>
       <ENTINFO_PERSON_NORM>Jefferson, Thomas</ENTINFO_PERSON_NORM>
       <ENTINFO_PERSON_MENTION>Thomas Jefferson</ENTINFO_PERSON_MENTION>
       <ENTINFO_PERSON_GIVEN>Thomas</ENTINFO_PERSON_GIVEN>
       <ENTINFO_PERSON_MIDDLE/>
       <ENTINFO_PERSON_SURNAME>Jefferson</ENTINFO_PERSON_SURNAME>
       <ENTINFO_SSN_NORM>222222222</ENTINFO_SSN_NORM>
       <ENTINFO_SSN_MENTION>social security number of 222-22-2222</ENTINFO_SSN_MENTION>
     </ENTINFO>
   </ENTITIES>
</NORMDOC>

112233
开国元勋信用合作社
1212
开国元勋信用合作社
98765
98876
乔治·华盛顿和托马斯·杰斐逊都是开国元勋。托马斯·杰斐逊的社会保险号码是222-22-2222。乔治·华盛顿的社会保险号码是111-11-1111。可以拨打111-222-3333联系乔治·华盛顿。
乔治华盛顿
托马斯·杰斐逊
托马斯·杰斐逊
222-22-2222
乔治华盛顿
111-11-1111
乔治华盛顿
111-222-3333
华盛顿,乔治
乔治华盛顿
乔治
华盛顿
111111111
社会保险号码111-11-1111
(111) 222-3333
111-222-3333
杰斐逊,托马斯
托马斯·杰斐逊
托马斯
杰斐逊
222222222
社会保险号码222-22-2222

考虑XSLT2.0的
xsl:for each group
将ENTINFO和REFINFO节点这两个人分组。然而,分组并不简单。我的建议是在REFINFO上运行组,并使用条件和变量帮助映射来自前面同级ENTINFO的所有信息

因此,不要在ENTINFO上应用模板,而是在RELINFO中运行分组操作。顺便说一句,由于张贴的ID不匹配,电话号码无法映射到最终的XML

具体来说,请删除此模板(或保留但多余),并保留所有其他模板

<xsl:template match="ENTINFO">
    <xsl:copy>
        <xsl:for-each select="@*">
            <xsl:element name="ENTINFO_{translate(name(), '-', '_')}">
                <xsl:value-of select="." />
            </xsl:element>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>

通常,您可以使用使用
xsl:key
声明的键和
key
函数来跟踪交叉引用。至于具体的例子,考虑到长的数字和各种元素,我无法识别存在哪些关系。我想设置各种键应该可以。如果你能解释不同的数字序列或缩短它们,以便更容易识别它们之间的关系,这可能会有所帮助。@MartinHonnen缩短了数字长度,不想减少各种元素,因为我认为它们提供了一些清晰性。现在有意义了吗?谢谢,我想这让我踏上了一条伟大的道路。是否可以更动态地执行此操作?i、 e.无需明确说明