比较不同XML文件中的元素值并附加到第一个XML文件中
我有以下两个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文件中的元素值并附加到第一个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 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的值。我需要名称空间,但顺序不重要。