将父节点添加到特定元素 xslt
Add parent node to a specific element xslt
我想select没有子节点的父节点
示例:
<root>
<p>some text</p>
<ol>
<li>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</li>
</ol>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> </p>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</root>
期望的输出:我想向那些 <a>
标签添加一个父 <p>
标签,这些标签除了 <root>
.
没有任何父标签
<root>
<p>some text</p>
<ol>
<li>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</li>
</ol>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> </p>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> <p>
</root>
我试过了,但没用。它在所有 <a>
标签周围添加了 <p>
标签。
<xsl:template match="a">
<xsl:if test="parent::*">
<p><a>
<!-- do not forget to copy possible other attributes -->
<xsl:apply-templates select="@* | node()"/>
</a></p>
</xsl:if>
</xsl:template>
I want to add a parent <p>
tag to those <a>
tags which don't have any parent except <root>
.
我认为归结为:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/a">
<p>
<xsl:copy-of select="."/>
</p>
</xsl:template>
</xsl:stylesheet>
这里有一个方法可以做到这一点:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="a[not(parent::p)]">
<p>
<xsl:copy-of select="."/>
</p>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我想select没有子节点的父节点
示例:
<root>
<p>some text</p>
<ol>
<li>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</li>
</ol>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> </p>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</root>
期望的输出:我想向那些 <a>
标签添加一个父 <p>
标签,这些标签除了 <root>
.
<root>
<p>some text</p>
<ol>
<li>
<a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a>
</li>
</ol>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> </p>
<p> <a href="http://cowherd.com" rel="nofollow">http://cowherd.com</a> <p>
</root>
我试过了,但没用。它在所有 <a>
标签周围添加了 <p>
标签。
<xsl:template match="a">
<xsl:if test="parent::*">
<p><a>
<!-- do not forget to copy possible other attributes -->
<xsl:apply-templates select="@* | node()"/>
</a></p>
</xsl:if>
</xsl:template>
I want to add a parent
<p>
tag to those<a>
tags which don't have any parent except<root>
.
我认为归结为:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/a">
<p>
<xsl:copy-of select="."/>
</p>
</xsl:template>
</xsl:stylesheet>
这里有一个方法可以做到这一点:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="a[not(parent::p)]">
<p>
<xsl:copy-of select="."/>
</p>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>