【发布时间】:2020-12-05 08:56:26
【问题描述】:
我有两个 xml 文件
file1.xml
<?xml version="1.0" encoding="UTF-8"?>
<tv>
...
<programme start="20200814040000 +0000" stop="20200814050000 +0000" channel="A">
<title>A</title>
<sub-title>C</sub-title>
<desc>F</desc>
</programme>
...
<programme start="20200814090000 +0000" stop="20200814093000 +0000" channel="A">
<title>B</title>
<sub-title>D</sub-title>
<desc>E</desc>
</programme>
...
</tv>
file2.xml
<?xml version="1.0" encoding="UTF-8"?>
<tv>
...
<programme start="20200814040000 +0000" stop="20200814050000 +0000" channel="A">
<title>G</title>
<sub-title>C</sub-title>
<desc>H</desc>
<episode-num system="onscreen">S9 E13</episode-num>
</programme>
...
<programme start="20200814090000 +0000" stop="20200814093000 +0000" channel="A">
<title>K</title>
<sub-title>L</sub-title>
<desc>M</desc>
<episode-num system="onscreen">S3 E2</episode-num>
</programme>
...
</tv>
我想要一个 xslt 2 模板来获取一个新文件
file3.xml
<?xml version="1.0" encoding="UTF-8"?>
<tv>
...
<programme start="20200814040000 +0000" stop="20200814050000 +0000" channel="A">
<title>A (G)</title>
<sub-title>C</sub-title>
<desc>F (H)</desc>
<episode-num system="onscreen">S9 E13</episode-num>
</programme>
...
<programme start="20200814090000 +0000" stop="20200814093000 +0000" channel="A">
<title>B (K)</title>
<sub-title>D (L)</sub-title>
<desc>E (M)</desc>
<episode-num system="onscreen">S3 E2</episode-num>
</programme>
...
</tv>
我进行了一些实验,但无法获得预期的输出。任何帮助将不胜感激。
为精确而编辑
当每个文件的程序属性相同时:
- 将两个文件中存在的子元素合并到新文件中的一个元素中并且 如果节点的文本内容不同,请将第二个文件的内容放在括号中
- 如果两个文件中都不存在子元素,则将其包含在新文件中
【问题讨论】:
-
那么合并元素的规则是什么?
-
所以程序元素及其属性必须相同才能进行合并,并且任何相同的子元素都必须合并为一个元素,其中第二个文件的内容在括号。任何不同的子元素都包含在新文件中,没有任何更改
-
channel元素的内容是否相关? -
否,通道节点不相关