比较不同XML文件中的元素值并附加到第一个XML文件中

比较不同XML文件中的元素值并附加到第一个XML文件中,xml,xslt,xpath,Xml,Xslt,Xpath,我有以下两个xml文件,其中我必须通过比较xml文件-2的wd:Task\u Name\u ID的元素值来生成与主xml文件-1完全相同的xml 比如说,, 主XML文件-1wd:Task\u Name\u ID具有以下值Task-1、Task-2、Task-3、Task-4、Task-5 XML文件-2TaskID具有Task-2、Task-6、Task-7、Task-1 <?xml version='1.0' encoding='UTF-8'?> <env:Envelope

我有以下两个xml文件,其中我必须通过比较xml文件-2的wd:Task\u Name\u ID的元素值来生成与主xml文件-1完全相同的xml

比如说,, 主XML文件-1wd:Task\u Name\u ID具有以下值Task-1、Task-2、Task-3、Task-4、Task-5

XML文件-2TaskID具有Task-2、Task-6、Task-7、Task-1

<?xml version='1.0' encoding='UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <wd:Get_Phase_Response xmlns:wd="urn:com" >
      <wd:Response_Data>
        <wd:Project>
          <wd:Project_Data>
            <wd:Project_ID>W-PROJECT-1</wd:Project_ID>
            <wd:Project_Name>W-PROJECT-1 Description</wd:Project_Name>
            <wd:Phase_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-1</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-1</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-2</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-2</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-3</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-3</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-4</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-4</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-5</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-5</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
            </wd:Phase_Data>
          </wd:Project_Data>
        </wd:Project>
      </wd:Response_Data>
    </wd:Get_Phase_Response>
  </env:Body>
</env:Envelope>
使用XSLT,我需要生成与主XML文件-1完全相同的文件,以及任务-6、任务-7

主XML-File-1

<?xml version='1.0' encoding='UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <wd:Get_Phase_Response xmlns:wd="urn:com" >
      <wd:Response_Data>
        <wd:Project>
          <wd:Project_Data>
            <wd:Project_ID>W-PROJECT-1</wd:Project_ID>
            <wd:Project_Name>W-PROJECT-1 Description</wd:Project_Name>
            <wd:Phase_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-1</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-1</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-2</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-2</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-3</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-3</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-4</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-4</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
              <wd:Task_Data>
                <wd:Task_Name_Data>
                  <wd:Task_Name_ID>Task-5</wd:Task_Name_ID>
                  <wd:Name>W-PHASE Task-5</wd:Name>
                </wd:Task_Name_Data>
              </wd:Task_Data>
            </wd:Phase_Data>
          </wd:Project_Data>
        </wd:Project>
      </wd:Response_Data>
    </wd:Get_Phase_Response>
  </env:Body>
</env:Envelope>

W-项目-1
W-项目-1说明
任务-1
W阶段任务-1
任务-2
W阶段任务-2
任务-3
W阶段任务-3
任务-4
W阶段任务-4
任务-5
W阶段任务-5
XML文件-2

<Report>
      <Details>
        <Project>W-PROJECT-1</Project>
        <TaskID>Task-2</TASKID>
        <Descr>W-PHASE Task-2</Descr>
      </Details>
      <Details>
        <Project>W-PROJECT-1</Project>
        <TaskID>Task-6</TASKID>
        <Descr>W-PHASE Task-6</Descr>
      </Details>
      <Details>
        <Project>W-PROJECT-1</Project>
        <TaskID>Task-7</TASKID>
        <Descr>W-PHASE Task-7</Descr>
      </Details>
      <Details>
        <Project>W-PROJECT-1</Project>
        <TaskID>Task-1</TASKID>
        <Descr>W-PHASE Task-1</Descr>
      </Details>
    </Report>

W-项目-1
任务-2
W阶段任务-2
W-项目-1
任务-6
W阶段任务-6
W-项目-1
任务-7
W阶段任务-7
W-项目-1
任务-1
W阶段任务-1

如果格式不好,很抱歉,这是我第一次回答问题。如果您使用的是XSL2.0,请尝试以下方法,使用File-1作为输入。您也可以扩展此示例以按项目\ ID对项目\数据进行分组,但由于您没有指定多个项目\数据对象,因此我没有将其包括在内

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wd="urn:com" exclude-result-prefixes="xs" version="2.0">
        <xsl:output method="xml" omit-xml-declaration="yes"/>
        <xsl:variable name="details" select="doc('File-2.xml')"/>
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="wd:Phase_Data">
            <xsl:copy>
                <xsl:for-each-group select="wd:Task_Data|$details/Report/Details" group-by="if(TaskID) then TaskID else wd:Task_Name_Data/wd:Task_Name_ID">
                    <xsl:element name="wd:Task_Data">
                        <xsl:element name="wd:Task_Name_Data">
                            <xsl:element name="wd:Task_Name_ID">
                                <xsl:value-of select="current-grouping-key()"/>
                            </xsl:element>
                            <xsl:element name="wd:Name">
                                <xsl:value-of select="if(Descr) then Descr else wd:Task_Name_Data/wd:Name"/>
                            </xsl:element>
                        </xsl:element>
                    </xsl:element>
                </xsl:for-each-group>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>


因此,您希望输出的XML全部是主XML文件-1加上主XML文件-1中不存在的XML文件-2中的值?您应该通过显示所需的值来更明确地说明输出内容。您想要名称空间吗?还是不?秩序重要吗?是否?是的,输出应该是所有主XML文件-1加上主XML文件-1中不存在的XML文件-2的值。我需要名称空间,但顺序不重要。