xml - 使用 xslt 处理 xml 文档中任意位置的元素
问题描述
我有一个xml
文件,它基本上是一篇文章的数据。我想使用xslt
.
我的问题:如何在 xml 文档中的任何位置通过 xslt 处理元素?
我的研究使我找到了身份模板,但我使用它的尝试被证明是徒劳的。这是我尝试过的东西:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="em">
blabla
</xsl:template>
但它并没有em
用 blabla 替换内容。
我还发现,在任何地方验证元素都不可能与xsd
模式有关。但我希望答案是不同的xslt
。
最小的工作示例:
<?xml version="1.0"?>
<doc>
<foo>text <em>italics</em> anything</foo>
<tag>text <foo><em>italics</em> stuff</foo></tag>
</doc>
例如,我想<em>foo</em>
用<it>foo</it>
or代替\emph{foo}
(当然在文档上进行其他转换)。
解决方案
您的 XSLT 已按要求工作。
这是一个替换为的完整em
示例it
:
中的 XML
<?xml version="1.0"?>
<doc>
<foo>text <em>italics</em> anything</foo>
<tag>text <foo><em>italics</em> stuff</foo></tag>
</doc>
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="em">
<it>
<xsl:apply-templates select="@*|node()"/>
</it>
</xsl:template>
</xsl:stylesheet>
XML 输出
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<foo>text <it>italics</it> anything</foo>
<tag>text <foo>
<it>italics</it> stuff</foo>
</tag>
</doc>
推荐阅读
- python - 使用 Python 的 pytest 框架进行测试时,Pycharm 生成奇怪的代码模板进行测试
- eclipse - 在缺少 testNG 时运行
- sql - 如何按大小对列进行排序
- oracle - 将 varchar2 表传递给过程
- r - 将裁剪的 pdf 图像从 R imagemagick 保存到新的 pdf
- docker - 从没有 xhost 但使用 xauth 的 docker 连接到 X11-server
- mysql - 如何在平面行中返回带有几个连接的多选 sql 查询
- c# - 如何使用asp.net mvc c#向用户发送电子邮件确认邮件
- verilog - Generate-if 语句无法计算为常数值
- java - 我想在android上旋转动画imageview