下面的样式表似乎与文档中的所有文本数据相匹配,我希望仅定位一个richtext元素,并遍历每个par元素下的每个run元素。
XML:
<?xml version='1.0' encoding='utf-8'?>
<document xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.lotus.com/dxl xmlschemas/domino_8_5_3.xsd'
xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='3.0' replicaid='934850394858534'
form='formreq'>
<noteinfo noteid='234234' unid='02934802938402934023942934' sequence='11'>
<created><datetime dst='true'>20130510T150111,26-05</datetime></created>
<modified><datetime dst='true'>20130513T095937,29-05</datetime></modified>
<revised><datetime dst='true'>20130513T095946,19-05</datetime></revised>
<lastaccessed><datetime dst='true'>20130513T093454,28-05</datetime></lastaccessed>
<addedtofile><datetime dst='true'>20130510T150342,15-05</datetime></addedtofile></noteinfo>
<item name="criteria">
<richtext>
<pardef id='1' leftmargin='0.0500in' rightmargin='97%' keepwithnext='true' keeptogether='true'/>
<par def='1'><run><font style='bold' name='Arial' pitch='variable' truetype='true' familyid='20'/>This is a test.</run></par>
<par def='1'><run><font style='bold' name='Arial' pitch='variable' truetype='true' familyid='20'/>And this is another test.</run></par>
</richtext>
</item>
</document>
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxl="http://www.lotus.com/dxl" >
<xsl:template match="dxl:document/dxl:item[@name='criteria']/dxl:richtext">
<div id="criteria">
<xsl:for-each select="par">
<xsl:for-each select="run">
<xsl:text>It worked!</xsl:text>
</xsl:for-each>
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>
我觉得匹配是一个命名空间问题。此外,我在几个不同的转换引擎上尝试了这个并得到了相同的结果:
<?xml version="1.0"?>
20130510T150111,26-05
20130513T095937,29-05
20130513T095946,19-05
20130513T093454,28-05
20130510T150342,15-05
<div xmlns:dxl="http://www.lotus.com/dxl" id="criteria"/>
我不确定为什么日期时间标记是匹配的,因为这不是我的匹配标准的一部分。
提供了一种帮助实时测试的工具答案 0 :(得分:3)
命名空间没有问题。此行为的原因是默认模板规则(或更好的说法:Built-in Template Rules。对xslt进行一些小的更改:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxl="http://www.lotus.com/dxl" >
<xsl:template match="dxl:richtext">
<div id="criteria">
<xsl:for-each select="dxl:par">
<xsl:for-each select="dxl:run">
<xsl:text>It worked!</xsl:text>
</xsl:for-each>
</xsl:for-each>
</div>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="dxl:document/dxl:item[@name='criteria']/dxl:richtext" />
</xsl:template>
</xsl:stylesheet>
将输出以下内容:
<?xml version="1.0"?>
<div xmlns:dxl="http://www.lotus.com/dxl" id="criteria">It worked!It worked!</div>