Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 XSLT只保留最上面的属性_Xml_Xslt - Fatal编程技术网

Xml XSLT只保留最上面的属性

Xml XSLT只保留最上面的属性,xml,xslt,Xml,Xslt,我已经创建了一个XMLDiff,但是这个diff是不干净的,因为它有时会将父对象以及一些子对象标记为已更改 我想清理diff,以便只有最上面标记的元素保留diff属性 在下面的示例中,我只想保留元素上的diff:delete属性,但将其从的所有子元素中删除,因为已被标记 输入是Docbook,任意元素可以包含diff属性 以下是我的XML: 规定 (欧盟)2017/745 欧洲议会和理事会 属于 2017年4月5日 关于医疗器械,修订指令2001/83/EC、第178/2002号法规(EC)和

我已经创建了一个XMLDiff,但是这个diff是不干净的,因为它有时会将父对象以及一些子对象标记为已更改

我想清理diff,以便只有最上面标记的元素保留diff属性

在下面的示例中,我只想保留
元素上的
diff:delete
属性,但将其从
的所有子元素中删除,因为
已被标记

输入是Docbook,任意元素可以包含diff属性

以下是我的XML:


规定
(欧盟)2017/745
欧洲议会和理事会
属于
2017年4月5日
关于医疗器械,修订指令2001/83/EC、第178/2002号法规(EC)和第1223/2009号法规(EC),并废除理事会指令90/385/EEC和93/42/EEC(与EEA相关的文本)
序言
欧洲议会和欧盟理事会,
考虑到《欧洲联盟运作条约》,特别是其中第114条和第168(4)(c)条,
考虑到欧洲联盟委员会的提议,
在向各国议会转交立法法草案之后,
考虑到欧洲经济和社会委员会的意见
意见
2013年2月14日
(
OJ C 133,2013年5月9日,第52页
).
,
以下是我的XSLT:


我的想法是寻找一个包含diff:delete属性的元素,检查它是否有一个具有相同属性的父元素,并在这种情况下应用一个空模板。复制其他所有内容。但是,它保持原始XML不变,并且不删除任何内容。

我想您需要:

<xsl:template match="@diff:delete[../ancestor::*/@diff:delete]"/>


谢谢,这很好用!你能帮我理解答案吗?../祖先是否检查父元素的父元素?它将查找具有相同属性的属性的父元素的祖先。请记住,匹配属性的父级也是其祖先之一。如果不排除它,谓词将始终为true。