【发布时间】:2017-04-26 11:34:37
【问题描述】:
我有一个使用 XSLT 1.0 转换的 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<element tag="container">
<data handle="$1">
...
</data>
<assignments/>
<expression context="$1">
Object_Text
</expression>
<expression context="$1">
Object_Text
</expression>
<expression context="$1">
Object_Heading
</expression>
<element tag="container">
<data handle="$2">
...
</data>
<assignments/>
<element tag="container">
<data handle="$3">
...
</data>
<assignments/>
<expression context="$3">
Object_Text
</expression>
</element>
<element tag="container">
...
</element>
</element>
<element tag="container">
<element tag="container">
<element tag="container">
<expression context="$1">
Object_Text
</expression>
</element>
</element>
</element>
<element tag="container">
<expression context="$1">
Object_Identifier
</expression>
</element>
</element>
我必须将每个表达式类型(Object_Text、Object_Heading、...)的赋值添加到包含标签的下一个 父 容器节点的标签(并非所有容器都有该标签,那些应该被忽略)并且表达式的上下文值必须与容器的句柄值相匹配。因为我需要为每个表达式类型赋值,所以无论它出现多少,我都应该在其上下文中为每个类型分配一个赋值。所以想要的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<element tag="container">
<data handle="$1">
...
</data>
<assignments> <!--Added assignments here (one for each type with @context='$1')-->
<assignment name="Object_Text">
</assignment>
<assignment name="Object_Heading">
</assignment>
<assignment name="Object_Identifier">
</assignment>
</assignments>
<expression context="$1">
Object_Text
</expression>
<expression context="$1">
Object_Text
</expression>
<expression context="$1">
Object_Heading
</expression>
<element tag="container">
<data handle="$2">
...
</data>
<assignments/>
<element tag="container">
<data handle="$3">
...
</data>
<assignments> <!--Added assignments here (one for each type with @context='$3')-->
<assignment name="Object_Text">
</assignment>
</assignments>
<expression context="$3">
Object_Text
</expression>
</element>
<element tag="container">
...
</element>
</element>
<element tag="container">
<expression context="$1">
Object_Identifier
</expression>
</element>
</element>
目前我可以通过 Muenchian Grouping 方法获得一组表达式类型(Object_Text 等)。但是我的问题是,我无法通过它们的属性@context 来区分这些表达式类型,因此容器只包含对正确表达式的分配,而它实际上包含相同的@context。
感谢您的帮助。有人知道实现所需输出的方法吗?我尝试了很多事情,但目前缺乏此任务的经验/知识。
编辑:应该补充一点,这是一个 xml 文档的示例结构。因此,xslt 函数应该能够识别任意嵌套、包装结构中的表达式以及任意次数。
【问题讨论】:
标签: xslt xpath xslt-1.0 nested-forms xslt-grouping