我需要一个 XSL 样式表,它允许我移动 XML 元素以在前一个同级元素的最后一个元素之前进行打印
拜托,我需要你的帮助!
我需要一个 XSL 样式表,它允许我移动 XML 元素以在前一个同级元素的最后一个元素(
IF(<工具> 或 <零件>)和 <计划>存在于 XML 中,那么 MOVE <计划>打印之前(<工具> 或 <零件>) 否则只需<应用模板/>。
我已经尝试了几件事,但在
XML 如下:
<work>
<prelim>
<code>ABC</code>
<source>DEF</source>
<tools>Includes codes for a table</tools>
</prelim>
<main>
<planning>Text for Planning</planning>
<p>blah blah blah</p>
</main>
</work>
如果上述条件存在,我希望我的输出为:
<work>
<prelim>
<code>ABC</code>
<source>DEF</source>
<planning>Text for Planning</planning>
<tools>Includes codes for a table</tools>
</prelim>
<main>
<p>blah blah blah</p>
</main>
</work>
任何人都可以帮助我实现这一目标吗?
提前致谢!!
琳达
Please, I need your help!!
I need an XSL stylesheet that lets me move an XML element to print before the preceding-sibling’s last element (<tools> or it could be <parts>). My if statement is:
IF (<tools> or <parts>) and <planning> exist in the XML, then
MOVE <planning> to print BEFORE (<tools> or <parts>)
OTHERWISE just <apply-templates />.
I've tried several things, but I just can't get it to print before <tools> or in some files, it's <parts>.
XML is as follows:
<work>
<prelim>
<code>ABC</code>
<source>DEF</source>
<tools>Includes codes for a table</tools>
</prelim>
<main>
<planning>Text for Planning</planning>
<p>blah blah blah</p>
</main>
</work>
I want my output to be if the above condition exists:
<work>
<prelim>
<code>ABC</code>
<source>DEF</source>
<planning>Text for Planning</planning>
<tools>Includes codes for a table</tools>
</prelim>
<main>
<p>blah blah blah</p>
</main>
</work>
Can anyone help me on how to achieve this?
Thanks in advance!!
Linda
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个样式表:
输出:
其他模式的方法:
This stylesheet:
Output:
Other approach with modes:
此转换:
当应用于提供的 XML 文档时:
准确产生所需的正确结果:
说明:
两个模板覆盖身份规则 - 一个用于防止
规划
的“就地复制”,另一个用于执行实际的移动操作。执行移动操作的覆盖模板具有以下属性:
它匹配满足以下条件的任何元素:1) 是顶部元素的第一个子元素的子元素,2) 不是
tool
或parts
,并且 3)前面没有tool
或parts
的同级元素,并且 4) 是满足 1)、2) 和 3) 的任何元素中的最后一个。操作很简单:该模板通过按名称调用身份规则来复制当前节点。然后,它复制其“表兄弟”——其父元素的第一个同级元素的
planning
child`。This transformation:
when applied on the provided XML document:
produces exactly the wanted, correct result:
Explanation:
The identity rule (template) copies every node "as-is".
Two templates override the identity rule -- one to prevent the "copy inplace" of
planning
, the other to do the actual move operation.The overriding template that performs the move operation has the following properties:
It matches any element that: 1) is a child of the first child of the top element, and 2) is not a
tool
orparts
, and 3) has no preceding sibling that is atool
or aparts
, and 4) is the last of any element that satisfies 1), 2), and 3).The action is simple: this template copies the current node by calling the identity rule by name. Then it copies its "cousin" -- the
planning
child` of the first following sibling of its parent element.