我有两个xmls
-
a.xml
-
b.xml
以下是a.xml
文件
<proj_details>
<proj_detail>
<Username>Username</Username>
<ID>ID</ID>
<Place>Ocean</Place>
<City>Urban</City>
<!-- some more fields -->
</proj_detail>
<proj_detail>
<Username>abc@abc.com</Username>
<ID>QoChiX5FlqU7VB2MKw5Aa</ID>
<Place>Road</Place>
<City>Rural</City>
<!-- some more fields -->
</proj_detail>
<proj_detail>
<Username>abc@abc.com</Username>
<ID>uzGjRVxnZPtB9sfiXtga</ID>
<Place>Mud</Place>
<City>SemiRural</City>
<!-- some more fields -->
</proj_detail>
<proj_detail>
<Username>abc@abc.com</Username>
<ID>YChiX5FluqhuyVB2OPw5Aa</ID>
<Place>Sea</Place>
<City>Sealine</City>
<!-- some more fields -->
</proj_detail>
<proj_detail>
<Username>abc@abc.com</Username>
<ID>RD37oO2jgW5p6f76W8up</ID>
<Place>Lane</Place>
<City>Leftsidelane</City>
<!-- some more fields -->
</proj_detail>
</proj_details>
<!-- more fields -->
下面是B.xml
<FilebDetail>
<Number>34</Number>
<CONS>abc@abc.com</CONS>
<PROD>xyz@xyz.com</PROD>
<ID>QoChiX5FlqU7VB2MKw5Aa</ID>
<Name>Directory/notepad</Name>
<Count>43</Count>
<time>43550.53333336</time>
<!-- some more fields-->
</FilebDetail>
<FilebDetail>
<Number>35</Number>
<CONS>abc@abc.com</CONS>
<PROD>cvb@cvb.com</PROD>
<ID>uzGjRVxnZPtB9sfiXtga</ID>
<Name>Speed/morning</Name>
<Count>42</Count>
<time>43550.5778</time>
<!-- some more fields-->
</FilebDetail>
<FilebDetail>
<Number>31</Number>
<CONS>abc@abc.com</CONS>
<PROD>cvb@cvb.com</PROD>
<ID>RD37oO2jgW5p6f76W8up</ID>
<Name>Weatherincity</Name>
<Count>12</Count>
<time>43550.498611111114</time>
<!-- some more fields-->
</FilebDetail>
</FilebDetails>
现在,我想得到如下所示的输出
<proj_detail>
<Number>34</Number>
<CONS>abc@abc.com</CONS>
<PROD>xyz@xyz.com</PROD>
<ID>QoChiX5FlNyqe1FuqU7VB2M</ID>
<Name>Directory/notepad</Name>
<Count>12</Count>
<time>43550.498611111114</time>
<Place>Road</Place>
<City>Rural</City>
<!-- some more fields -->
</proj_detail>
<proj_detail>
<Number>35</Number>
<CONS>abc@abc.com</CONS>
<PROD>cvb@cvb.com</PROD>
<ID>uzGjRVxnxmP00zrnZPtB9sM</ID>
<Name>Speed/morning</Name>
<Count>42</Count>
<time>43550.5778</time>
<Place>Mud</Place>
<City>SemiRural</City>
</proj_detail>
<!-- some more fields -->
<proj_detail>
<Number>31</Number>
<CONS>abc@abc.com</CONS>
<PROD>cvb@cvb.com</PROD>
<ID>RD37oO2jg4rlerxW5p6f76</ID>
<Name>Weatherincity</Name>
<Count>12</Count>
<time>43550.498611111114</time>
<Place>Lane</Place>
<City>Leftsidelane</City>
</proj_detail>
<!-- some more fields -->
</proj_details>
在这两个文件中,ID是通用的,这是需要比较的。比较后,我们将打印两个文件中的相应字段。
我对xslt很陌生。任何 xslt 版本都可以使用。
这方面的任何指导都会非常有帮助。
谢谢
如果您有一对一的关系,合并将很简单。运行此 XSLT 2.0 样式表,a.xml
作为输入,b.xml
作为参数:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:param name="update"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="proj_detail">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates
select="$update/FilebDetails/FilebDetail[ID = current()/ID]/(* except ID)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意:您必须注意 XSLT 处理器将节点作为参数传递的机制,否则您将需要使用 document()
函数。
从这个基本转换中,您可以添加优化,例如使用key()
函数(您必须使用 XSLT 2.0 -arity 3- key()
函数(。您也可以通过ID
和"字段"名称声明该键,假设$update
参数是更新流,因此您将选择最后一个参数,等等。