我有一个特别的问题很像this one,但在我的情况下,如果任何前面的兄弟的孩子不包含某个节点,我想只有一个匹配。
在我的情况下,我从Word文档中获取此XML:
<w:r>
<w:drawing>
</w:drawing>
</w:r>
<w:r w:rsidR="00AE7312">
<w:rPr>
<w:i/>
<w:iCs/>
<w:w w:val="100"/>
</w:rPr>
<w:t>Some italic text</w:t>
</w:r>
我希望避免同时包含w:r's
和w:i
的{{1}}。
我到目前为止尝试的xsl是这个的变种:
w:drawing
和这个
<xsl:template match="w:r[./w:rPr/w:i][not(preceding-sibling::*[w:drawing][1])]">
<i><xsl:value-of select="."/></i>
</xsl:template>
到目前为止,当我不想要时,我仍然会得到模板匹配。
如果有人想知道我在做什么,我正在将word文件转换为dita / XML文件。在这种情况下,我尝试将 <xsl:template match="w:r[./w:rPr/w:i] and not(preceding-sibling::w:r[w:drawing][1])]">
<i><xsl:value-of select="."/></i>
</xsl:template>
标记添加到斜体文本中。但是,在我的word文档中有一些实例,其中图像在一个表格内以及一些斜体文本,我需要避免匹配这种情况以保留图像。
答案 0 :(得分:1)
更改
w:r[./w:rPr/w:i][not(preceding-sibling::*[w:drawing][1])]
到
w:r[w:rPr/w:i][preceding-sibling::w:r[1][not(w:drawing)]]
为了使那些w:r
与一个斜体属性相匹配,该属性不是w:r
兄弟与w:drawing
孩子之前的紧接。
<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:r>
<w:drawing/>
</w:r>
<w:r w:rsidR="00AE7312">
<w:rPr>
<w:i/>
<w:iCs/>
<w:w w:val="100"/>
</w:rPr>
<w:t>Some italic text 1</w:t>
</w:r>
<w:r w:rsidR="00AE7312">
<w:rPr>
<w:i/>
<w:iCs/>
<w:w w:val="100"/>
</w:rPr>
<w:t>Some italic text 2</w:t>
</w:r>
</w:p>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
exclude-result-prefixes="w">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="w:r[w:rPr/w:i][preceding-sibling::w:r[1][not(w:drawing)]]">
<i><xsl:value-of select="normalize-space()"/></i>
</xsl:template>
<xsl:template match="w:p">
<p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<p>
<i>Some italic text 2</i>
</p>