需要去掉多余的普通元素
Need to remove the extra normal element
我有重复出现的元素,需要删除元素并重新排列它
输入XML:
<section>
<p class="p heading">Heading</p>
<p class="normal">Text</p>
<ul>
<li><p class="p"><span class="bold">Check</span> - Remaining</p></li>
</ul>
</section>
我正在使用 XSL,因为我正在将列表参数更改为普通参数:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="class-map">
<name>
<old>heading</old>
<new>Headings</new>
</name>
<name>
<old>normal</old>
<new>Actual</new>
</name>
</xsl:param>
<xsl:key name="class-map" match="name/new" use="../old"/>
<xsl:template match="p/@class[key('class-map', tokenize(.), $class-map)]">
<xsl:attribute name="style">
<xsl:attribute name="{name()}" select="key('class-map', tokenize(.) , $class-map)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<normal>
<xsl:apply-templates/>
</normal>
</xsl:copy>
</xsl:template>
<xsl:template match="span[@class='bold']">
<normal style="CD Bold">
<xsl:apply-templates/>
</normal>
</xsl:template>
<xsl:template match="ul">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="li">
<xsl:apply-templates/>
</xsl:template>
<xsl:mode on-no-match="shallow-copy"/>
</xsl:stylesheet>
预期输出:
<section>
<p style="Headings"><normal>Heading</normal></p>
<p style="Actual"><normal>Text</normal></p>
<p class="p"><normal style="CD Bold">Check</normal><normal style="normal"> - Remaining</normal></p>
</section>
需要删除多余的 normal
元素并将其设置为粗体为粗体 class 并将其重新排列在正常文本的另一个位置。
我做到了,只是我写了和你一样的 XML 输入文件,所以输入和输出都是一样的。
这是 XML/HTML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<section>
<p class="p heading">Heading</p>
<p class="normal">Text</p>
<ul>
<li>
<p class="p">
<span class="bold">Check</span> - Remaining
</p>
</li>
</ul>
</section>
备注:
对于 HTML 个标签,我们不需要使用:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="#all"
导入一些库时要小心。如果您添加的太多,您的代码将花费更多时间。这是因为您的代码必须首先创建对链接和 .co 的所有引用。这也可能导致一些错误,就像 Java.
中一样
使用 [@...='...']
我们可以调用元素的特定修改,例如 <normal style="CD Bold">
:
normal[@style='CD Bold'
我的结果:
<?xml version="1.0" encoding="UTF-8"?><?xe.source ../TemporaryFiles/Test_XML_1.xml?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<section>
<p style="Headings">
<normal>
<xsl:value-of select="/section/p[@class='p heading']"></xsl:value-of>
</normal>
</p>
<p style="Actual">
<normal>
<xsl:value-of select="/section/p[@class='normal']"></xsl:value-of>
</normal>
</p>
<p class="p">
<normal style="CD Bold">
<xsl:value-of select="/section/ul/li/p[@class='p']/span[@class='bold']"></xsl:value-of>
</normal>
<normal style="normal">
-<xsl:value-of select="substring-after(/section/ul/li/p[@class='p'],'-')"></xsl:value-of>
</normal>
</p>
</section>
</xsl:template>
</xsl:stylesheet>
<?xe.source ../Temporary Files/Test_XML_1.xml?>
行用于将 XML 文件直接添加到 XSLT 文件。该路径应该是您的另一条路径
我用那个简单的 XSLT 文件实现了您的期望。
这是结果:
<?xml version="1.0" encoding="UTF-8"?>
<section>
<p style="Headings">
<normal>Heading</normal>
</p>
<p style="Actual">
<normal>Text</normal>
</p>
<p class="p">
<normal style="CD Bold">Check</normal>
<normal style="normal"> - Remaining </normal>
</p>
</section>
如果你想在 <p class="p">
中使用粗体,你可以在这里使用这行代码:
<normal style="CD Bold">
<xsl:value-of select="/section/ul/li/p[@class='p']/span[@class='bold']"></xsl:value-of> - <xsl:value-of select="substring-after(/section/ul/li/p[@class='p'],' - ')"></xsl:value-of>
</normal>
我有重复出现的元素,需要删除元素并重新排列它
输入XML:
<section>
<p class="p heading">Heading</p>
<p class="normal">Text</p>
<ul>
<li><p class="p"><span class="bold">Check</span> - Remaining</p></li>
</ul>
</section>
我正在使用 XSL,因为我正在将列表参数更改为普通参数:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="class-map">
<name>
<old>heading</old>
<new>Headings</new>
</name>
<name>
<old>normal</old>
<new>Actual</new>
</name>
</xsl:param>
<xsl:key name="class-map" match="name/new" use="../old"/>
<xsl:template match="p/@class[key('class-map', tokenize(.), $class-map)]">
<xsl:attribute name="style">
<xsl:attribute name="{name()}" select="key('class-map', tokenize(.) , $class-map)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<normal>
<xsl:apply-templates/>
</normal>
</xsl:copy>
</xsl:template>
<xsl:template match="span[@class='bold']">
<normal style="CD Bold">
<xsl:apply-templates/>
</normal>
</xsl:template>
<xsl:template match="ul">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="li">
<xsl:apply-templates/>
</xsl:template>
<xsl:mode on-no-match="shallow-copy"/>
</xsl:stylesheet>
预期输出:
<section>
<p style="Headings"><normal>Heading</normal></p>
<p style="Actual"><normal>Text</normal></p>
<p class="p"><normal style="CD Bold">Check</normal><normal style="normal"> - Remaining</normal></p>
</section>
需要删除多余的 normal
元素并将其设置为粗体为粗体 class 并将其重新排列在正常文本的另一个位置。
我做到了,只是我写了和你一样的 XML 输入文件,所以输入和输出都是一样的。
这是 XML/HTML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<section>
<p class="p heading">Heading</p>
<p class="normal">Text</p>
<ul>
<li>
<p class="p">
<span class="bold">Check</span> - Remaining
</p>
</li>
</ul>
</section>
备注: 对于 HTML 个标签,我们不需要使用:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="#all"
导入一些库时要小心。如果您添加的太多,您的代码将花费更多时间。这是因为您的代码必须首先创建对链接和 .co 的所有引用。这也可能导致一些错误,就像 Java.
中一样使用 [@...='...']
我们可以调用元素的特定修改,例如 <normal style="CD Bold">
:
normal[@style='CD Bold'
我的结果:
<?xml version="1.0" encoding="UTF-8"?><?xe.source ../TemporaryFiles/Test_XML_1.xml?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output media-type="text/xml" method="xml"></xsl:output>
<xsl:template match="/">
<section>
<p style="Headings">
<normal>
<xsl:value-of select="/section/p[@class='p heading']"></xsl:value-of>
</normal>
</p>
<p style="Actual">
<normal>
<xsl:value-of select="/section/p[@class='normal']"></xsl:value-of>
</normal>
</p>
<p class="p">
<normal style="CD Bold">
<xsl:value-of select="/section/ul/li/p[@class='p']/span[@class='bold']"></xsl:value-of>
</normal>
<normal style="normal">
-<xsl:value-of select="substring-after(/section/ul/li/p[@class='p'],'-')"></xsl:value-of>
</normal>
</p>
</section>
</xsl:template>
</xsl:stylesheet>
<?xe.source ../Temporary Files/Test_XML_1.xml?>
行用于将 XML 文件直接添加到 XSLT 文件。该路径应该是您的另一条路径
我用那个简单的 XSLT 文件实现了您的期望。
这是结果:
<?xml version="1.0" encoding="UTF-8"?>
<section>
<p style="Headings">
<normal>Heading</normal>
</p>
<p style="Actual">
<normal>Text</normal>
</p>
<p class="p">
<normal style="CD Bold">Check</normal>
<normal style="normal"> - Remaining </normal>
</p>
</section>
如果你想在 <p class="p">
中使用粗体,你可以在这里使用这行代码:
<normal style="CD Bold">
<xsl:value-of select="/section/ul/li/p[@class='p']/span[@class='bold']"></xsl:value-of> - <xsl:value-of select="substring-after(/section/ul/li/p[@class='p'],' - ')"></xsl:value-of>
</normal>