如何复制整个元素但只删除部分孩子?
我想要复制div#about
,但我想从中删除table
元素。
输入HTML:
<html>
<body>
<div class="content-header">
<h1>Title</h1>
</div>
<div id="about">
<h1>About</h1>
<table>...</table>
<p>Bla bla bla</p>
<table>...</table>
<p>The end</p>
</div>
</body>
</html>
XSLT:
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<div class="article">
<h1>
<xsl:value select="//div[@class='content-header']/h1/text()"/>
</h1>
<div>
<xsl:copy-of select="//div[@id='about']"/>
<!-- Here should render the entire div#about without the tables -->
</div>
</div>
</xsl:template>
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>
</xsl:transform>
答案 0 :(得分:2)
首先将身份模板添加到您的XSLT
<xsl:mode on-no-match="shallow-copy"/>
(或者,如果您使用的是XSLT 3.0,则可以使用table
)
然后添加另一个模板以忽略<xsl:template match="div[@id='about']/table" />
元素
xsl:copy-of
最后,将xsl:apply-templates
替换为table
以允许匹配这些模板,从而确保<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="div[@id='about']/table" />
<xsl:template match="/">
<div class="article">
<h1>
<xsl:value-of select="//div[@class='content-header']/h1/text()"/>
</h1>
<div>
<xsl:apply-templates select="//div[@id='about']"/>
</div>
</div>
</xsl:template>
</xsl:transform>
元素不会被复制。
试试这个XSLT
@RunWith(Parameterized.class)
public class ExampleInstrumentedTest extends TestCase {
private MainActivity ma = new MainActivity();
@Parameterized.Parameter(0)
public float expectedResult;
@Parameterized.Parameter(1)
public float firstNum;
@Parameterized.Parameter(2)
public float secondNum;
@Parameterized.Parameters(name = "{index}: testAdd {0} = ({1}+{2})")
public static Collection<Object[]> testData(){
Object[][] data = new Object[][]{ {6,2,4}, {7,4,3}};
return Arrays.asList(data);
}
@Test
public void testAdd() throws InterruptedException {
float result = firstNum + secondNum;
Assert.assertEquals(expectedResult, result, .1);
}
}